Ruby on rails 如何使用where子句在字符串数组中进行选择
我试图在where子句中使用字符串数组进行搜索 数组是通过如下方式拆分param[:q][:genres\u name\u cont]中包含的字符串生成的: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("
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]
返回什么?