0

任意の数の用語で検索できるようにする必要がある、カンマ区切りの文字列値の 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(",")

等々。ジャンル => ["ロック", "オルタナティブ"] の場合、ジャンル列にこれらの用語のいずれかを含むすべてのトラックに一致し、追加のすべての用語は返された配列から選択され、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 に答える