0

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

4

1 回答 1

1

^ 考虑使用流派、情绪和节奏的模型。ActiveRecord 将使涉及这些的查询变得更加容易。

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

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

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

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

于 2012-06-12T20:06:17.740 回答