モデルのscopeを書くとき
user.rb
class User < ActiveRecord::Base
scope :hoge, -> (fuga) { find_by(fuga: fuga) }
end
こんな風にうっかりfind_by
なんかを書いてしまうと、レコードが取れない場合にnil
でもUser.none
でもなくUser.all
(
相当のもの)がかえってくる。
こう書くべき。
user.rb
class User < ActiveRecord::Base
def self.hoge(fuga)
find_by(fuga: fuga)
end
end
scopeなんてただのクラスメソッドの略記法かと思ってたけど違うんですね。