Rails関連のことを調べてみた2020年04月27日

Rails関連のことを調べてみた2020年04月27日

【Rails】devise1つで複数モデルを管理する方法

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

#1.`devise`を導入

“`ruby:Gemfile
gem ‘devise’ #追記
“`

“`terminal:ターミナル
$ bundle
“`

“`terminal:ターミナル
$ rails g devise:install
“`

#2.`「devise.rb」`を編集

“`ruby:config/devise.rb
#235行目をコメントアウトして、「true」に変更
config.scoped_views = true
“`

#3.モデルを作成

“`terminal:ターミナル
$ rails g devise user
“`

“`terminal:ターミナル
$ rails g devise admin
“`

#4.コントローラーを作成

“`terminal:ターミナル
$ rails g devise:controllers users
“`

元記事を表示

Rails:migrationをrollback時にActiveRecord::UnknownMigrationVersionErrorが出たときの対処法

## 概要
`$ rails db:rollback`や`$ rails db:migrate:down VERSION=マイグレーションID`
時に以下のようなエラーで正しくrollback出来なかったときの対処法.

“`ruby
ActiveRecord::UnknownMigrationVersionError:
No migration with version number マイグレーションID
“`

## 原因
対象となるマイグレーションIDのマイグレーションファイルが見つからなく、downが出来ないよ、と怒られている.

## 対処法

### 消したいマイグレーションIDを見つける

“`bash
$ rails db:migrate:status
“`

そうすると

“`ruby
status Migration ID Migration Name
︙ ︙ ︙
up 200427074212 ********** NO FILE **********
“`

元記事を表示

[フリマアプリ]gem ancestryを用いたカテゴリー表示機能。

# はじめに
今回実装する機能はこちら
![c97ad7c6f0f4a1009decb6bc7933e0a4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601876/2d731381-abf7-b002-1929-c4c098ed19a3.gif)

## 手順1 [gemの追加,モデル,テーブルの作成]
Gemfileにancestryを追加
ターミナルでbundle install

“`ruby:Gemfile
# 一番下に
gem ‘ancestry’
“`

categoryモデルの作成

“`ruby:ターミナル
$rails g model category
“`

マイグレーションファイルを編集
ターミナルでrails db:migrate。

“`ruby:db/migrate/2020xxxxxxxx.rb

class CreateCategories < ActiveRecord::Migration[5.2] def change create_tab

元記事を表示

[追記予定有]ポートフォリオ作ったので見てくれ

# tl;dr
https://towayamashita.github.io/

元記事を表示

ピンポイントに文字サイズを変更する方法『HTML』

“`html.erb

文字
“`

“から““まで挟んだ部分が適用されます。
文字の大きさは、10pxの部分を変更すれは変わります。

元記事を表示

devise ユーザー登録場面でパスワード文字数を指定する方法

**deviseを用いsign_up,sign_in機能を実装しています。**
**よくある、パスワードの文字数指定について、どこに何を追記すべきかメモしておきます。**

環境
rails (5.2.4.2)

userモデルの:validatableに続けて、password_length: (指定文字数)..128と
記載すればOKです。
※128の意味は勉強中

7文字以上としたい場合は以下のようになります。

“`ruby:user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, password_length: 7..128 validates :nickname, :password, :email, :last_name, :first_name, :ruby_last_name, :ruby_first_name, :birthda

元記事を表示

ActiveModel::SerializerのRspec

### はじめに

SerializerのRSpecについて備忘録で残しておきます。

参考にしたのは[こちらのドキュメント](https://www.rubydoc.info/gems/active_model_serializers/0.9.4)

### ソースコード

Serializerを使って、`id`、`name`、`email`のみを返すjsonを実装しました。

“`rb:user_serializer.rb
class UserSerializer < ActiveModel::Serializer attribute :id attribute :name attribute :email end ``` そのテストコードがこちら ポイントだと思うところはこちらの2つ 1. **Serializerのインスタンス**を生成する必要がある 2. **`.to_json`メソッドのオプション**を使用して、返ってくるデータのカラムを指定する必要がある アソシエーションがある場合は、`include`オプションを利用するとうまいこと書けると思います。

元記事を表示

Rails attr_accessorを使って、より良いコードを書いてみよう。

どうもチャンクノです。
今個人アプリで勝率を表示するページを作っています。
メソッド作成に困リ果てた結果、attr_accessorを使って解決したお話です。
今回は少し長くなります。
初学者の方が見ると参考になる部分があるかもしれません。

まずは下記のコードを見てみましょう。

“`
viewの記述

<%= @trade.win_rate(current_user) %>
“`

“`
model側の記述

def win_rate(current_user)
trades = Trade.where(“trades.user_id” => current_user.id)
win_trades = trades.where(“trades.result” => “勝”).count
(win_trades / trades.count.to_f * 100).floor
end
“`

これで一応勝率が導き出せます。
が!!!
はっきり言ってこれは全然よくないコードです。
なぜだかわかりますか?

なぜかというと、月ごとの勝率を出すなど他のパターン

元記事を表示

I18nについて

# I18nとは
国際化という意味で、「Internationalization」の略です。
18の部分は”I”と”n”の間に18文字あることから由来しています。
これを利用することで様々な国の言語に対応させることができます!

## 使い方
####tメソッド(tはtranslateの頭文字からきている。)
日本語のアクセスと英語のアクセスに応じて対応可能となる。

“`

<%= I18t("sports.soccer") %>
“`

“`config/locales/ja.yml

ja:
sports:
soccer: “サッカー”
“`

“`config/locales/en.yml

en:
sports:
soccer: “soccer”
“`

####lメソッド(Localizeの頭文字である)
lメソッドは日付や時刻を表す際に用います。

“`config/locales/ja.yml

ja:
date:
formats:
default: “%Y/%m/%d”
long: “%Y年%

元記事を表示

Dockerのproduction環境でのbundle exec方法

DockerでRailsをする時にProduction環境で`db:create`ができずに調べてもなかなか情報が出てこなかったのでメモ。`docker exec`の`-e`オプションで環境変数をセットしてコンテナ内部のコマンドを呼べます。

“`.sh
docker exec -e RAILS_ENV=’production’ myapp bundle exec rake db:create
“`

### 参考

Docker Exec Command With Examples

元記事を表示

bundlerバージョン違いのエラーを解消する

Factory Botをインストールしようとしたらエラー。

### version
– ruby 2.4.9
– Rails 5.1.1
– factory_bot_rails ~> 4.10.0

“`bash
bundle install

The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock –add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/…….

元記事を表示

Ruby on Railsの基礎

#rails new
Railsで新規アプリケーションを作成する際に使用。
コマンドを実行する際は作成したいアプリケーション名を最後につけてrails new アプリケーション名とコマンドを実行。
また、オプションを付ける場合にはハイフン-を使い-オプション名と追記することで様々なオプションをつけることができる。

“`
$ rails new アプリケーション名 -オプション名
# オプションを付けてアプリケーションを作成
“`

#MySQL
データを保存するDBの一種。
RailsではMySQLの他に「SQLite」などのDBも使用することができる。
RailsアプリケーションでMySQLデータベースを使用する場合、
rails newコマンドに「-d mysql」というオプションを付けて新規railsアプリケーションを作成する。
このオプションによって「MySQL」というDBに最適化された設定でアプリケーションが生成される。

“`
rails _5.2.3_ new app -d mysql
“`

#rails db:create コマンド
新しくDBを作成するには

元記事を表示

「data()」と「attr()」について

# 背景
カスタム属性を使う際に必須のメソッドの2つの違いがいまいち理解していなかったため調べて自分なりにまとめてみた。

## data()について
「data()」を使うとHTML要素内に付与されたdata属性に対して、取得・設定・変更などが簡単に行える。
独自の属性を作成して付与できるのがdata属性の特徴です。
このようにすることで、あとからJavaScriptやjQueryで取得・変更できるわけです。

## attr()について
dataメソッドと似ていますが、属性名の指定は「data-」の部分も一緒に記述しなければならない。

## data()の使い方

“`javascript

私の名前は佐藤です



// =>{name: “sato”, age

元記事を表示

Rails で render の後に書かれた処理は実行されるけどレスポンスを返すのは全処理が終わった後

# 背景

– こちらの記事を読んで Rails で response を返した後の処理が実行されるのかが気になった
– [アクションの中のrender(), redirect_to()の後の処理は実行される](https://donghai821.hatenadiary.org/entry/20081201/1228122804)
– 書かれたのが10年以上前だったので最近だとどうなのかを調べたい
– 先に response を返せると何が嬉しいか?
– タイムアウトまでの時間制限が厳しいシステムや機能と連携する際に非同期処理にしなくてもよくなる
– 例えば Slack とか
– https://api.slack.com/interactivity/slash-commands#responding_to_commands
– `This confirmation must be received by Slack within 3000 milliseconds of the original request bei

元記事を表示

bundle installでAn error occurred while installing mysql2

“`
$ rails _5.2.4.1_ new appname –database=mysql –skip-test –skip-turbolinks –skip-bundle
“`
でrailsアプリを新規作成した後、

“`
$ bundle install

—–
Don’t know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
—–
—–
Setting libpath to /usr/local/Cellar/mysql/8.0.19/lib
—–

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Ge

元記事を表示

【Rails】has_secure_passwordでパスワードのセキュリティを強化

##目的
__パスワードのセキュリティを強化する。__

##手段
__has_secure_passwordを使ってパスワードをハッシュ化する。__

・ハッシュ化は、訳のわからない暗号みたいな文字列に変換すること。

・has_secure_passwordでハッシュ化されたパスワードは、同じ文字列で生成すれば常に同じ値になるので一致しているかどうかをチェックする際に使える。

・has_secure_passwordでハッシュ化したパスワードは、元のパスワードそのものに戻すことができないので、ハッシュ化されたパスワードを奪われたとしても何の問題もないのでパスワードのセキュリティが強固になる。

##手順
####1.Userモデル作成時のパスワード属性をpassword_digestとする。
 ➡︎has_secure_passwordを使う際の命名規則なので必須。

####2.Gemfileにbcryptというgemを追加して、インストールする。
 ➡︎bcryptというgemをインストールすることで、has_secure_passwordを使えるようになりパスワードをハッ

元記事を表示

chmod 600 ←600ってなんやねん

##近況報告
とりあえずデプロイは完了しました。readmeを書いて,投稿物を揃え,エラー対応すれば見世物としての体裁はできあがるのかな。某雑食系さんのツイートに,ポートフォリオはサーバーサイドの実力はもちろんのこと,コンテンツ力,そして見た目も評価の対象になりうるとありましたね(めっちゃ噛み砕いた)。自分のはサーバーサイドの記述,実力はまだまだですけど,見た目は手を抜かなければよくできるので,今の自分の最善を尽くした作品を作っていこうと思います。

#今回の目的
chmodに続く数字を知る。

#結論
ファイルへの権限の種類だよ

##詳細
[参考](https://linuxfan.info/chmod)

chmodは「change mode」の略で,桁数,数字の組み合わせによって編集の権限とかを設定しています。
これにより,第三者からの不正アクセスの予防に繋がります。

|桁数|意味|
|:——-:|:——–:|
|1桁目(百の位)|所有者のアクセス権限の範囲|
|2桁目(十の位)|グループのアクセス権限の範囲|
|3桁目(一の位)|その他のユーザーのアクセス

元記事を表示

なぜany?はpresent?より高速と言われるのか

# はじめに
「present?メソッドとany?メソッドだったらany?メソッドが高速なのか・・・なぜだろう?」
この疑問を解決すべく、present?メソッドとany?メソッドの処理の違いについて調べてみました。

# 環境
macOS Catalina Version 10.15.4
Ruby: 2.7.0
Ruby on Rails: 6.0.2.2

# present?メソッド、any?メソッドの違い
どちらもテーブルにデータが存在するかを確認するメソッドです。
けれども内部処理はどちらも異なっています。

侍エンジニアブログさんの、any?メソッド記事の一部を抜粋します。

>present?メソッドとany?メソッドとの違いについて紹介します。
結論からいうとany?メソッドの方が高速です。
present? → 全てのデータを取得する
any? → 1件のみデータを取得する
Railsが実行する
SQLを比較して違いを確認してみましょう。

“`
> Sample.where(name:”侍1″).present?
Sample Load (0.4ms) SELE

元記事を表示

AWS Cloud9でRuby on Railsを動かしてみた

こんにちは!モリタケンタロウです!
今回はAWSのCloud9で、Ruby on Railsを動かす方法について紹介します。

# AWS Cloud9とは
AWS Cloud9については↓をご参考にどうぞ

* [AWS Cloud9で開発環境を立ててみた](https://qiita.com/MORITAKENTARO/items/db791b8a45eda53259f2)

# Ruby on Railsとは
Ruby on RailsはRubyで動作するMVCモデルのフレームワークです。
Webアプリケーション開発に向いていて、世の中のあらゆるサービスがこのRuby on Railsでできています。
Railsはオワコンと言われていたりもしますが、僕が会社でRailsのWebアプリ開発をやっていたときに、勉強しやすくて書きやすかったので、とりあえず今回はRailsを使ってみようと思います。

# とにかくやってみよう!
AWS Cloud9では最初からRubyもRailsもインストールされています。
`ruby -v`と`rails -v`のコマンドで確認できます。
![rub

元記事を表示

Railsで新しいアプリを作ったらActiveRecord::ConnectionNotEstablishedが出てきた

こんにちは!モリタケンタロウです!
今回はRailsでアプリを新規作成して動かしてみたら、「ActiveRecord::ConnectionNotEstablished」というエラーが出てきたので、それを解決する方法について紹介します。

# 開発環境
* ruby 2.6.3p62
* Rails 5.0.0

# エラー内容
`rails server`コマンドでアプリを動かすと、画面にはこんなエラーが出てきます。
![noconnection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612211/b645e4d3-1eaa-5806-89ba-3aca7b060cee.png)
`ActiveRecord::ConnectionNotEstablished`
`No connection pool with id primary found`
なにこれ!?分からん…
ということでググると、RailsのORM機能であるActiveRecordが、`sqlite3`の新しいバージョンに対応してな

元記事を表示

OTHERカテゴリの最新記事