我有一个 Track 模型,其中包含 4 列逗号分隔的字符串值,需要通过任意数量的术语进行搜索。
例如
Track.first.genre => "Alternative, Lite Rock, Indie Rock, Psychedelic"
Track.first.mood => "Aggressive, Angry, Dark, Driving, Energetic, Heavy"
Track.first.tempo => "Fast, Medium"
Track.first.artist => "something"
然后,用户可以使用任意数量的术语来缩小显示的曲目列表。我将这些术语收集到与每列匹配的数组中。例如
genres = params[:genre].split(",")
moods = params[:mood].split(",")
等等。因此,如果genres => ["Rock", "Alternative"],这将匹配所有在流派列中包含这些术语的曲目,并且所有附加术语将从返回的数组中进行选择,依此类推,对于 4 个中的每一个列。
执行此操作的最佳方法是什么,以及如何使用 like 和数组作为条件编写 where 查询?