0

:except_ids私はスコープを持つユーザーモデルを持っています:

scope :except_ids, ->(*ids) { where { id.not_in ids } }

問題は、別の遅延クエリでは使用できないことです。たとえば、次のように呼び出すとします。

User.except_ids(User.except_ids(1,2))

私はで終わる

TypeError: Cannot visit Arel::SelectManager

私のプロジェクトにはもっと複雑なクエリがありますが、そのスコープを除いてすべて正常に動作します。スコープを実際のコードに置き換えることで機能させることができますが、それはにおいがします。

それで、これを見つける方法はありますか?

4

1 に答える 1

2

単一の SQL クエリでこれを実現したい場合は、Arel で直接サポートされていないサブクエリを含める必要がありますが、たとえば、この回避策を使用できます。

表示されるエラーはUser.except_ids(1,2)、 のインスタンスを返すという事実が原因ActiveRecord::Relationである可能性があります。これは、ラムダの署名の splat 演算子の問題である可能性があります。これは機能しますが、2 つのクエリが発生します。

User.except_ids(User.except_ids(1,2).map(&:id))
于 2013-03-22T10:21:04.507 に答える