空の ActiveRecord リレーションを返すにはどうすればいいですか? 質問する

空の ActiveRecord リレーションを返すにはどうすればいいですか? 質問する

ラムダ付きのスコープがあり、引数を取る場合、引数の値によっては一致するものがないことが分かっていても、空の配列ではなくリレーションを返したい場合があります。

scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] }

私が本当に欲しいのは、「all」の反対で、連鎖可能な関係を返すものの、クエリが短絡される「none」メソッドです。

ベストアンサー1

Rails 4 には現在「正しい」メカニズムがあります:

>> Model.none 
=> #<ActiveRecord::Relation []>

おすすめ記事