Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用where子句在字符串数组中进行选择_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 如何使用where子句在字符串数组中进行选择

Ruby on rails 如何使用where子句在字符串数组中进行选择,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我试图在where子句中使用字符串数组进行搜索 数组是通过如下方式拆分param[:q][:genres\u name\u cont]中包含的字符串生成的: params[:q][:genrearray] = params[:q][:genres_name_cont].split 例如,如果在流派字段中输入“摇滚布鲁斯”,则参数[:q][:genrearay]=[“摇滚”、“布鲁斯”] 给我在where子句中使用的数组: @bands = Band.joins(:genres).where("

我试图在where子句中使用字符串数组进行搜索

数组是通过如下方式拆分param[:q][:genres\u name\u cont]中包含的字符串生成的:

params[:q][:genrearray] = params[:q][:genres_name_cont].split
例如,如果在流派字段中输入“摇滚布鲁斯”,则参数[:q][:genrearay]=[“摇滚”、“布鲁斯”]

给我在where子句中使用的数组:

@bands = Band.joins(:genres).where("genres.name IN (?)", params[:q][:genrearray])
但是,生成的SQL似乎不像我预期的那样在数组中搜索:

SELECT DISTINCT "bands".* FROM "bands" LEFT OUTER JOIN "bands_genres" ON "bands_genres"."band_id" = "bands"."id" LEFT OUTER JOIN "genres" ON "genres"."id" = "bands_genres"."genre_id" WHERE "genres"."name" ILIKE '%Rock Blues%'
我希望看到的不是像“我喜欢摇滚乐%”,而是像“IN('Rock','Blues')”


提前感谢所有能够提供帮助的人。

为什么不通过
in
子句中的
进行搜索?和
Band.joins(:genres).where(genres:{name:params[:q][:genrearray]})
与您的查询相同,但是@davegson的副本可能更好,这不也可以搜索整个数组吗?我也尝试过这个,但它的工作原理与上面完全相同,即不给我想要的东西。我知道这里更整洁!我会考虑,如果使用一点数据规范化是一个更好的解决方案。创建一个流派表和一个选择标签,用户可以在其中选择流派。这将为您提供一个ID数组,从而避免昂贵的字符串比较。好的,您确实希望在
中使用
-我最初没有得到这个。我编写的查询确实会在
查询中生成一个
,前提是将数组作为参数传递给它。我想问题就在那里。
params[:q][:genrearray]
返回什么?