簡體   English   中英

Rails-Searchlogic將條件搜索為值數組

[英]Rails - Searchlogic to search condition as an array of value

我有兩個模型EmployeeUnit 單位有很多員工 我正在使用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])

這里同樣的問題。

我不知道為什么這對我有用,或者為什么我嘗試過,因為它沒有記錄。 但是我將_equals更改為_in,它使用IN生成了SQL,並且運行良好。

Employee.unit_id_in([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) 

在嘗試了上面的解決方案之后,我們發現這兩種語法替代方法有效:

User.id_in([1,2,3]) <-- as suggested above
User.id_equals_any([1,2,3])

換句話說,沒有“ _any”,新的搜索邏輯將生成無效的mysql。 調查何時以及為什么可能發生此更改,我發現了此提交討論:

Github提交更改數組的處理

此更改和討論的結果是,當您想與數組中的任何值進行匹配時,要求_any多次,否則只需將數組直接傳遞給equals語句,而無需將SQL更改為“ IN”即可值。

恢復到2.4.7可以清除錯誤。 為了避免棄用錯誤,我們最終將所有調用更改為更明確的_any或_in。 希望這會有所幫助並增加到上面非常有用的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM