4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails 割と使うのにど忘れするコトをまとめてみた。

Last updated at Posted at 2020-07-29

Railsを約3年程やってみて、それなりに使うけど毎日使うわけでもないのでいざ書くとなると**「どう書くんだっけ?」**とついド忘れしてしまう項目をまとめてみた。

Enum

個人的に「あれ・・・思い出せない」になる回数1位

参考:【Rails】Enumってどんな子?使えるの?

記述例

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のアロー関数の様な -> や、引数ありの場合の () を「どこに書くだっけ」となってしまう

参考:Railsでよく利用する、Scopeの使い方。

記述例

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

membercollection はどっちが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                                                         
4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?