Railsを約3年程やってみて、それなりに使うけど毎日使うわけでもないのでいざ書くとなると**「どう書くんだっけ?」**とついド忘れしてしまう項目をまとめてみた。
Enum
個人的に「あれ・・・思い出せない」になる回数1位
記述例
menu.rb
class Menu < ApplicationRecord
enum category: { japanese: 0, chinese: 1, western: 2, other: 3 }
end
ja.yml
ja:
enums:
menu:
category:
japanese: 和食
chinese: 中華
western: 洋食
other: その他
よく使うメソッド
# 設定を確認する
[18] pry(main)> Menu.categories
=> {"japanese"=>0, "chinese"=>1, "western"=>2, "other"=>3}
[19] pry(main)> Menu.categories["japanese"]
=> 0
[20] pry(main)> Menu.categories[:japanese]
=> 0
# 設定(日本語)を確認する
[21] pry(main)> Menu.categories_i18n
=> {"japanese"=>"和食", "chinese"=>"中華", "western"=>"洋食", "other"=>"その他"}
# 個々のインスタンスの値を確認する
[22] pry(main)> menu = Menu.last
[23] pry(main)> menu.category
=> "japanese"
[24] pry(main)> menu.category_i18n
=> "和食"
[25] pry(main)> menu.category_before_type_cast
=> 0
Scope
JavaScriptのアロー関数の様な ->
や、引数ありの場合の ()
を「どこに書くだっけ」となってしまう
記述例
menu.rb
class Menu < ApplicationRecord
enum category: { japanese: 0, chinese: 1, western: 2, other: 3 }
# 引数なしの場合
scope :asian_food, -> { where(category: [Menu.categories[:japanese], Menu.categories[:chinese]]) }
end
呼び出し方
[10] pry(main)> Menu.asian_food
=> [#<Menu:0x0000560df31d6058 id: 1, category: "japanese", name: "出し巻き卵">, #<Menu:0x0000560df31d5f18 id: 2, category: "japanese", name: "味噌汁">]
ActiveRecordのSQLベタ書き
ActiveRecordのメソッドだけでは取得できないデータが欲しい時に部分的にSQLをベタ書きする場合の書き方。プレイスホルダーをどう書くのか忘れてしまう。
[13] pry(main)> Menu.where('created_at >= ?', Date.today)
=> [#<Menu:0x0000561ef0c68c38
id: 3,
category: "japanese",
name: "お好み焼き",
created_at: Sat, 25 Jul 2020 15:43:24 JST +09:00,
updated_at: Sat, 25 Jul 2020 15:43:24 JST +09:00>]
routes
member
と collection
はどっちがidありでどっちがid無しか、とっさに分からなくなってしまう。
参考:railsのroutes.rbのmemberとcollectionの違いをわかりやすく解説してみた。〜rails初心者から中級者へ〜
routes.rb
resources :menus do
collection do
get :photo
end
member do
get :reviews
end
end
結論、id
があるのが member
、無いのが collection
。
photo_menus GET /menus/photo(.:format) menus#photo
reviews_menu GET /menus/:id/reviews(.:format) menus#reviews