この記事は一旦雑にアウトプットしているので、別途書き直したい
この記事の内容
eachのみにしたいが、firstが入り込んでしまうのでうーんとなる
初期値にModel.noneを用いることで解消できるという話
具体例
愚直に書くとfirstが入り込んでしまう
User.rb
# @param [Array<String>] words
# @return [ActiveRecord::Relation]
def find_by_keywords(words)
query = User.where(name: words.first)
words.each do |w|
query.or(User.where(name: w))
end
query.merge(User.where(is_active: true)) # その他に条件がある場合はmergeすることがある
end
eachにすべてまとめてfirstをなくすには、以下のようにnoneを使うと解消できる
※ noneが入ってくることに違和感はある...
User.rb
# @param [Array<String>] words
# @return [ActiveRecord::Relation]
def find_by_keywords(words)
query = User.none
words.each do |w|
query.or(User.where(name: w))
end
query.merge(User.where(is_active: true)) # その他に条件がある場合はmergeすることがある
end
なんでそんなことになるの?
あとで書く
備考
状態をもたないActiveRecord::Relationが生成できれば良さそうなので、他にも方法はありそう?
-
query = ActiveRecord::Relation.new
な状態が作れればよいのでは?