哪里喜欢用数组查询

时间:2012-06-12 19:56:41

标签: ruby-on-rails

我有一个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查询?

1 个答案:

答案 0 :(得分:1)

^考虑使用流派,情绪和模型的模型速度。 ActiveRecord将使查询更容易参与。

^ serialize声明可以为您节省一些翻译费用。

^您可以通过where调用搜索所需的数组元素,例如:

class Track < ActiveRecord::Base
  def self.for_genre(name)
    where "genre like '%#{name}%'"
  end
end

这意味着选择不是其他名称的子串的名称。