web-dev-qa-db-ja.com

Rails(ActiveRecordを使用)のクエリからIDの配列を除外するにはどうすればよいですか?

特定のIDを持つレコードを除くすべてのレコードを返すActiveRecordクエリを実行したいと思います。除外したいIDは配列に格納されます。そう:

ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item. ???

2行目を完成させる方法がわかりません。

背景:私がすでに試したこと:

背景が必要かどうかはわかりませんが、.findと.whereのさまざまな組み合わせをすでに試しました。例えば:

array_without_excluded_ids = Item.find(:all, :conditions => { "id not IN (?)", ids_to_exclude })
array_without_excluded_ids = Item.where( "items.id not IN ?", ids_to_exclude)

これらは失敗します。 このヒント 正しい方向に進んでいる可能性がありますが、私はそれを適応させることに成功していません。どんな助けでも大歓迎です。

21
CuriousYogurt

これは機能するはずです:

ids_to_exclude = [1,2,3]
items_table = Arel::Table.new(:items)

array_without_excluded_ids = Item.where(items_table[:id].not_in ids_to_exclude)

そしてそれは文字列のない完全なオブジェクト指向です:-)

32
Scott

Rails 4ソリューション:

ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item.where.not(id: ids_to_exclude)
33
nslocum

Squeel gemを使用して、このようなクエリを実行することもできます。それのドキュメンテーションは行きます ここ

2
SriramK89