2017-06-20 57 views
0

使用此:LIKE查詢中軌5不工作

.. .where("field1 IN(?) AND field2 LIKE(?) AND field3 LIKE(?) ", params[:array_for_field1], "%#{params[:array_for_field2]}%", "%#{params[:array_for_field3]}%") 

我得到這個:

SELECT `table`.* FROM `table` WHERE(field1 IN('value1','value2','value3') AND field2 LIKE('%[\"value1\", \"value2\"]%') AND field3 LIKE('%[\"value1\"]%')) 

我想知道哪來的錯誤,因爲FIELD1的作品,但「LIKE查詢「部分使用%不是,參數來自複選框的形式。謝謝

+0

使用此迴應:https://stackoverflow.com/questions/19412607/rails-where-like-and-array – Aschen

+0

@ user1936635看看這個答案,我昨天發佈https://stackoverflow.com /問題/ 44633250 /紅寶石軌-SQL查詢重新排序詞-IN-A-搜索項/ 44634062#44634062。這是使用'Arel'交叉數據庫兼容的。你只需要稍微擴展它,以處理你感興趣的多個領域 – engineersmnky

+0

真棒,我會嘗試Arel。謝謝 – user1936635

回答

0

根據this response如果你正在使用Postgres的你可以嘗試這樣的事:

field2_ilike_params = params[:array_for_field2].map { |p| "%p%" } 
field3_ilike_params = params[:array_for_field3].map { |p| "%p%" } 
Model.where(field1: params[:array_for_field1]).where("field2 ILIKE ANY (array[?]) AND field3 ILIKE ANY (array[?])", field2_ilike_params, field3_ilike_params) 
+0

如果你能告訴我如何在MySQL上做到這一點,非常感謝。非常感謝你 – user1936635

1

我最終使用正則表達式與此解決方案,它的工作原理是我需要的。

.where("field1 IN(?) AND field2 RLIKE(?) AND field3 RLIKE(?) ", params[:array_for_field1], params[:array_for_field2].join("|"), params[:array_for_field3].join("|"))