1

私は、次のようなActiveRecordクエリへのハッシュ引数の使用に精通しています。

SomeModel.where(association_id: something.id, status: ACTIVE_STATUSES).exists?

および同様。しかし、単純なNOTEQUAL!=または<>タイプ条件を実行したい場合はどうでしょうか。私の単純なケースは、現在のオブジェクトをクエリから除外することです。

私が考えることができる唯一の方法はこれです:

SomeModel.where("id != ?", self.id).where(association_id: something.id,...)

しかし、これはあまりレールのようではないようです。

より簡単な方法、またはを!=ハッシュ条件に含める方法はありますか?

4

3 に答える 3

3

Arelテーブルにドロップすることができます。Arelには素晴らしい(プロの)Railscastがあります。 http://railscasts.com/episodes/355-hacking-with-arel

Squeelgemを使用することもできます。
http://erniemiller.org/projects/squeel/
http://railscasts.com/episodes/354-squeel

Squeelの場合:

SomeModel.where{ id != my_id }
于 2012-09-06T20:28:12.673 に答える
2

Rails 4にはnot

SomeModel.where.not(id: self.id)
于 2014-10-31T11:16:53.943 に答える
1

そうです、クエリに!=を含める唯一の方法は、

SomeModel.where("id != ?", self.id)

それはさておき、ActiveRecordは他の構造を次のように適切なSQLクエリに変換します。

where(:id => [1,2,3])

これにより、「where id in(1,2,3)」が生成されますが、!=、>、<の場合、これが唯一の解決策です(他の方法で発見できれば幸いですが)

于 2012-09-06T19:36:24.853 に答える