特定の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)
これらは失敗します。 このヒント 正しい方向に進んでいる可能性がありますが、私はそれを適応させることに成功していません。どんな助けでも大歓迎です。
これは機能するはずです:
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)
そしてそれは文字列のない完全なオブジェクト指向です:-)
Rails 4ソリューション:
ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item.where.not(id: ids_to_exclude)
Squeel
gemを使用して、このようなクエリを実行することもできます。それのドキュメンテーションは行きます ここ