1. ホーム
  2. ruby-on-rails

[解決済み】空のActiveRecordリレーションを返すには?

2022-04-02 16:57:10

質問

ラムダを持つスコープがあり、それが引数を取る場合、引数の値によってはマッチしないことが分かっていても、空の配列ではなくリレーションを返したい。

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

私が本当に欲しいのは、"all" の逆で、まだ連鎖できる関係を返しますが、クエリが短絡される結果になる "none" メソッドなのです。

解決するには?

Rails 4では、quot;correct"メカニズムがあります。

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