EmployeeとUnitの 2 つのモデルがあります。ユニットには多くの従業員がいます。私は SearchLogic を使用して従業員モデルを検索しています。Searchlogicで以下のSQLに相当するものは何ですか
employees.unit_id IN (1,2,3)
私は両方を試しました
unit_id_equals_all[]
unit_id_equals_any[]
しかし、何も機能しません。誰でも助けることができますか?
ありがとう、アビラッシュ
EmployeeとUnitの 2 つのモデルがあります。ユニットには多くの従業員がいます。私は SearchLogic を使用して従業員モデルを検索しています。Searchlogicで以下のSQLに相当するものは何ですか
employees.unit_id IN (1,2,3)
私は両方を試しました
unit_id_equals_all[]
unit_id_equals_any[]
しかし、何も機能しません。誰でも助けることができますか?
ありがとう、アビラッシュ
Employee.unit_id_equals([1, 2, 3])
Rails 2.3.12 プロジェクトでも同じ問題が発生しました。searchlogic 2.4.7 では、次のことができます。
User.id_equals([1,2,3])
検索ロジック 2.5.8 にアップグレードした後 (古いバージョンの非推奨メッセージにより、キュウリと仕様の出力が散らかっていました)、この構文は機能しなくなりました。上記と同じように、このエラーがスローされました。
ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT * FROM `users` WHERE (users.id = 1, 2, 3)
上記の解決策を試した後、次の 2 つの代替構文が機能することがわかりました。
User.id_in([1,2,3]) <-- as suggested above
User.id_equals_any([1,2,3])
つまり、「_any」がないと、新しい検索ロジックによって無効な mysql が生成されます。この変更がいつ、なぜ発生したかを調べたところ、次のコミット ディスカッションが見つかりました。
この変更と議論の結末は、配列内の任意の値との一致が必要な場合に _any を要求することでした。それ以外の場合は、複数の値の必要に応じて SQL を "IN" に変更せずに、配列を equals ステートメントに直接渡すだけです。値。
2.4.7 に戻すと、エラーが解消されます。すべての呼び出しをより明示的な _any または _in に変更することは、非推奨エラーを回避するために行ったことです。これが役に立ち、上記の非常に役立つ回答に追加されることを願っています。
ここでも同じ問題。
文書化されていないため、なぜこれがうまくいったのか、なぜ試したのかわかりません。しかし、_equals を _in に変更すると、IN を使用して SQL が生成され、完全に機能しました。
Employee.unit_id_in([1, 2, 3])