そのため、Rails 4 では、not
クエリを使用するための長い間望まれていた機能が追加されました。
Article.where.not(title: 'Rails 3')
クエリに同様のサポートが追加されていますor
か、または追加する予定はありますか。リリースノートを閲覧しても何も見つかりませんでした。
明らかに私は試しました
Article.where(title: 'Rails 3').or(title: 'Rails 4')
しかし、それはうまくいきません。
そのため、Rails 4 では、not
クエリを使用するための長い間望まれていた機能が追加されました。
Article.where.not(title: 'Rails 3')
クエリに同様のサポートが追加されていますor
か、または追加する予定はありますか。リリースノートを閲覧しても何も見つかりませんでした。
明らかに私は試しました
Article.where(title: 'Rails 3').or(title: 'Rails 4')
しかし、それはうまくいきません。
Article.where(title: ['Rails 3', 'Rails 4'])
Active Recordでそれを行う方法です。
「Rails-y」構文を使用して、任意の SQL クエリを複製することはできません。ただし、いつでもリテラル sql を渡すことができます。
したがって、次のこともできます。
Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")
最も一般的な代替手段は、@gregates による回答です
最近、レールソースにプルリクエストがありました
#any_of
クエリメソッドをactive_recordに追加
して、activerecordに機能を追加します
寄稿者は、受け入れられない場合に備えて、すでに宝石を作成しています
そのレール 3.2 および 4 互換
https://github.com/oelmekki/activerecord_any_of
まだ試していませんが、すぐに使いたいと思います。
これが古いスレッドであることは知っていますが、この問題の解決策を探している人は、次のコードが役立つかもしれません。
Article.where(title: ["Rails 3", "Rails 4"])
おそらく、SQL インジェクションの危険を冒すことなく、誰かを正しい方向に導くのに役立つでしょう。
より複雑なクエリにはSqueelを使用できます。
Article.where{(title == 'Rails 3') | (title == 'Rails 4')}
これにより、次の SQL クエリが生成されます。
SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))