2

基本的な条件 (find ステートメントなど) とより一般的な where 句の両方について、ユーザーは条件のグループのいずれかを探すことができます。例えば:

User.find_by_name(["One", "Two", "Three"])
User.find_by_name_and_age(["One", "Two"],[1,2,3])

また

User.where(:bonus_id => [1,2,3])

ただし、ここでは少し矛盾しています。使用する場合

User.find_by_bonus_id([nil,1,2])

これにより、予想どおり、「nil」のボーナス ID を持つ使用が返されます。ただし、"find_by_... and ..." 形式と "where" 形式はどちらもこの方法では機能しません。

User.where(:bonus_id => [nil,1])

Bonus_id が 1 のユーザーのみを返します。

User.where(:bonus_id => [nil]

何も返しません!

User.where(:bonus_id => nil)

ただし、正常に動作します。

私が知る限り、where 句 (および find_by_and メソッド) は配列を折りたたんで、真実でない値をすべて削除します。これは私にとってかなり重大な問題です。

where句配列(または回避策)にnilを含める方法を知っている人はいますか、それとも正しい動作を得るために複数のクエリを結合する必要がありますか?

追加メモ:
- バージョン 3.0.11
- Nils は実際にはドロップされませんが、特定の状況下では、SQL で IS NULL ではなく IN (NULL) が比較されます。タイトルは不正確ですが、問題が発生したときに最初に表示される方法であるため、そのままにしておきます。

4

1 に答える 1

2

Rails3.1.0で問題を再現できません。どのバージョンを使用していますか?

これを試して:

User.where(["bonus_id IN (?) OR bonus_id IS NULL", [1,2]])

Bonus_idが1、2、またはnullのユーザーを返します

于 2012-09-18T20:46:51.267 に答える