71

そのため、Rails 4 では、notクエリを使用するための長い間望まれていた機能が追加されました。

Article.where.not(title: 'Rails 3')

クエリに同様のサポートが追加されていますorか、または追加する予定はありますか。リリースノートを閲覧しても何も見つかりませんでした。

明らかに私は試しました

Article.where(title: 'Rails 3').or(title: 'Rails 4')

しかし、それはうまくいきません。

4

7 に答える 7

99
Article.where(title: ['Rails 3', 'Rails 4'])

Active Recordでそれを行う方法です。

「Rails-y」構文を使用して、任意の SQL クエリを複製することはできません。ただし、いつでもリテラル sql を渡すことができます。

したがって、次のこともできます。

Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")
于 2013-06-19T13:42:39.050 に答える
11

最も一般的な代替手段は、@gregates による回答です

最近、レールソースにプルリクエストがありました

#any_ofクエリメソッドをactive_recordに追加 して、activerecordに機能を追加します

寄稿者は、受け入れられない場合に備えて、すでに宝石を作成しています

そのレール 3.2 および 4 互換

https://github.com/oelmekki/activerecord_any_of

まだ試していませんが、すぐに使いたいと思います。

于 2013-06-19T13:56:24.537 に答える
5

これが古いスレッドであることは知っていますが、この問題の解決策を探している人は、次のコードが役立つかもしれません。

Article.where(title: ["Rails 3", "Rails 4"])

おそらく、SQL インジェクションの危険を冒すことなく、誰かを正しい方向に導くのに役立つでしょう。

于 2014-03-13T22:02:09.213 に答える
2

より複雑なクエリにはSqueelを使用できます。

Article.where{(title == 'Rails 3') | (title == 'Rails 4')}

これにより、次の SQL クエリが生成されます。

SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))
于 2013-06-19T15:08:57.757 に答える