(2023-11-02更新)
Ruby on Railsについての自分用メモです。
ルーティング
config/routes.rb
に記入する。
リソース全体を登録するには resoures :books
のように書く。
限定、除外するにはそれぞれ only
, except
をつける。
resources :books, only: [:index, :show] resources :authors, except: [:destroy, :update]
ルーティングの確認方法:
- Rails コンソールから
rails routes
を実行 http://localhost:3000/rails/info/routes
にアクセス
ActiveRecord で最終 n 件を取得する
Books.all.order(name: 'DESC').limit(5)
結果は降順で取得される (order
は1度しか指定できないため)。
昇順で取得したい時はサブクエリを使って次のようにする。
Books.all.order(:name).where(id: Books.all.order(name: 'DESC').limit(5).select(:id))
その他
- bundlerで
group :production
以外をインストールする:bundle install --without production
- サンドボックスでコンソールを開く:
rails console --sandbox
- 特定の環境用にコンソールを開く:
rails console --environment {環境}
- generate:
rails generate controller StaticPages home help
,rails generate model User name:string email:string
- コントローラやリソースは複数形、モデルは単数形で指定する
rails generate model
するとマイグレーションファイルが作成されるので、中身を確認してからrails db:migrate
を実行してデータベースに反映させる
- generateを取り消す:
rails destroy model User
(Qiita) - モデルでハッシュ化したパスワードを使う: モデル内に
has_secure_password
を入れる。テーブルのpassword_digest
に格納される - assertion:
- レスポンスコード:
assert_response :success
(doc) - テンプレートの使用:
assert_template "users/new"
- 要素が存在する:
assert_select "title", "Sign up"
,assert_select "div#message"
(Qiita) - 要素が存在しない:
assert_select "title", false, "Sign up"
,assert_select "div#message", false
(APIdock) - 状態に変更がない:
assert_no_difference "User.count" {ブロック}
- 状態に変更がある:
assert_difference "User.count"
, 1つ増える→assert_difference "User.count", 1
- レスポンスコード:
- flashとflash.now:
- debugger
- ActiveRecord
- db:migrate
- 基本操作は
rails generate migration 〜
(マイグレーション作成)→rails db:migrate
(適用) - 最後に適用したものを戻す:
rails db:rollback
- 現在の適用状況を見る:
rails db:migrate:status
- 最初から適用し直す:
rails db:migrate:reset
- マイグレーションファイルの作成:
- モデル作成時:
rails generate model User name:string email:string
- フィールドの追加:
rails generate migration add_password_digest_to_users password_digest:string
- 固定小数点フィールドは
t.decimal :fieldname, precision: 11, scale: 3
のように作成する (この場合全11桁のうち小数点以下3桁)
- モデル作成時:
- 基本操作は
- db:seed
db/seeds.rb
ファイルで初期値を設定する- 初期値の投入は
rails db:seed
- 複数回実行するとデータが複数回追加されたりIDを指定している場合には重複の問題があるため
rails db:migrate:reset
でデータベースを作り直してから実行する方がよい
- Railsバージョンアップ:
Gemfile
のバージョンを変更し、bundle update rails
を実行 (Qiita)