1

EmployeeUnitの 2 つのモデルがあります。ユニットには多くの従業員がいます。私は SearchLogic を使用して従業員モデルを検索しています。Searchlogicで以下のSQLに相当するものは何ですか

employees.unit_id IN (1,2,3)

私は両方を試しました

unit_id_equals_all[] 
unit_id_equals_any[]

しかし、何も機能しません。誰でも助けることができますか?

ありがとう、アビラッシュ

4

3 に答える 3

1
Employee.unit_id_equals([1, 2, 3])
于 2010-09-15T07:33:01.983 に答える
1

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 が生成されます。この変更がいつ、なぜ発生したかを調べたところ、次のコミット ディスカッションが見つかりました。

配列の処理を変更するGithub commit

この変更と議論の結末は、配列内の任意の値との一致が必要な場合に _any を要求することでした。それ以外の場合は、複数の値の必要に応じて SQL を "IN" に変更せずに、配列を equals ステートメントに直接渡すだけです。値。

2.4.7 に戻すと、エラーが解消されます。すべての呼び出しをより明示的な _any または _in に変更することは、非推奨エラーを回避するために行ったことです。これが役に立ち、上記の非常に役立つ回答に追加されることを願っています。

于 2011-08-18T21:17:47.727 に答える
1

ここでも同じ問題。

文書化されていないため、なぜこれがうまくいったのか、なぜ試したのかわかりません。しかし、_equals を _in に変更すると、IN を使用して SQL が生成され、完全に機能しました。

Employee.unit_id_in([1, 2, 3])
于 2011-08-08T14:16:03.113 に答える