我有一个Track模型,其中有4列逗号分隔的字符串值,需要通过任意数量的术语进行搜索。
e.g。
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"
然后,用户可以使用任意数量的术语来缩小显示的曲目列表范围。我将这些术语收集到与每列匹配的数组中。 e.g。
genres = params[:genre].split(",")
moods = params[:mood].split(",")
等等。所以如果genres => [" Rock"," Alternative"],它将匹配包含流派列中任何一个术语的所有曲目,并且所有其他术语将从返回的数组中进行选择,依此类推对于4列中的每一列。
执行此操作的最佳方法是什么,以及如何使用类似数组作为条件来编写where查询?
答案 0 :(得分:1)
^考虑使用流派,情绪和模型的模型速度。 ActiveRecord将使查询更容易参与。
^ serialize
声明可以为您节省一些翻译费用。
^您可以通过where调用搜索所需的数组元素,例如:
class Track < ActiveRecord::Base
def self.for_genre(name)
where "genre like '%#{name}%'"
end
end
这意味着选择不是其他名称的子串的名称。