2010-09-15 54 views
1

我有兩個模型僱員 & 單位單位有很多僱員。我正在使用SearchLogic來搜索員工模型。下面是什麼SQL在SearchlogicRails - Searchlogic搜索條件作爲數組值

employees.unit_id IN (1,2,3) 

相當於我曾經嘗試都

unit_id_equals_all[] 
unit_id_equals_any[] 

但沒有任何工程。誰能幫忙?

感謝,Abhilash

這裏

回答

1
Employee.unit_id_equals([1, 2, 3]) 
+0

不幸的是,這是行不通的。我在「employees.unit_id IN(?)」 – eabhvee 2010-09-15 07:48:21

+0

中得到這個錯誤「綁定變量的錯誤數目(2 for 1)」您能否提供關於錯誤消息的更多提示?例如何時生成消息?我不明白爲什麼有2個變量...... – PeterWong 2010-09-15 08:10:02

+0

在我的搜索視圖中,我選擇了2個單元,並將它作爲數組傳遞,如果我選擇5,它會將5表示爲1.我的參數散列是這樣的 - - > unit_id_equals「=> [」332「,」333「] – eabhvee 2010-09-15 08:23:41

1

同樣的問題。

我不知道爲什麼這爲我工作,或爲什麼我甚至嘗試過,因爲它是無證的。但是我將_equals更改爲_in,並用IN生成了SQL,並且完美地工作。

Employee.unit_id_in([1, 2, 3]) 
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) 

嘗試上述解決方案後,我們發現這兩種語法的替代工作:

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

換句話說,沒有「_any」新搜索邏輯產生無效的mysql。尋找到什麼時候,爲什麼會發生這種變化,我發現這次提交討論:

Github commit changing handling of arrays

這種變化的結果和討論,是需要時間_any當你想對在任何值匹配數組,否則只需將數組直接傳遞給equals語句,而不需要根據多個值的需要將SQL更改爲「IN」。

恢復到2.4.7將清除錯誤。將所有調用更改爲更清晰的_any或_in是我們爲避免折舊錯誤而最終做的。希望這有助於增加上面非常有幫助的答案。

+0

好的結果,看起來像文檔需要更新。 – Zubin 2012-08-28 23:50:23