2017-06-20 5 views
0

Mit dieser:wie Abfrage in Schienen 5 nicht funktioniert

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

Ich erhalte dieses:

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

Ich mag würde wissen, wo ist der Fehler, für field1 funktioniert, aber die „LIKE Abfrage "Teil mit% ist nicht, die Parameter kommt aus einem Kontrollkästchen. danke

+0

Verwenden Sie diese Antwort: https://stackoverflow.com/questions/19412607/rails-where-like-and-array – Aschen

+0

@ user1936635 werfen Sie einen Blick auf diese Antwort, die ich gestern geschrieben https://stackoverflow.com/questions/44633250/ruby-rails-sql-abfrage-reordering-words-in-a-search-term/44634062 # 44634062. Dies ist Cross-Datenbank-kompatibel mit 'Arel'. Sie müssen es nur so leicht erweitern, um die verschiedenen Felder zu bearbeiten, die Sie interessieren – engineersmnky

+0

genial, ich werde Arel versuchen. danke – user1936635

Antwort

0

Nach this response wenn Sie Postgres verwenden Sie so etwas wie dies versuchen:

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

schätzen, wenn Sie mir zeigen können, wie man es auf MySQL macht. Vielen Dank – user1936635

1

ich mit REGEX dieser Lösung am Ende, es funktioniert wie ich brauchte.

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