2016-03-18 9 views
-1

クライアントには赤、青、ピンクなど多くの色の異なるシャツがあります。赤シャツですべてのクライアントを選びたいと思います。どうやって?includeを使用してクライアントの配列を返す方法は?

シャツは、次のように格納されます。

c = Client.last 
c.shirt #=> "red,blue,pink" 

クライアントが1色のシャツを持っていたた場合、私は同じような情報を取得したい:

Client.where(shirt: "red") 

しかし、クライアントは、多くのシャツを持っていますので、 、include?のようなものが必要です。英語は次のようになります:赤シャツを着ているすべてのクライアントを教えてください。あなたはどのようにそれを書いていますか?

c = Client.all 
c.map do |m| m.shirt.include? "red" end #=> [0] true 

私は赤いシャツでクライアントの配列を返すのが好きです。

+0

は 'shirt'は' Client'の別のクラスか列ですか? –

+0

@ Dimitry_Nはい。シャツは、クライアントの列です – Sylar

答えて

2

あなたはでそれを見つけることができるはずです。

Client.where('shirt like ?', "%#{color}%") 

パーセント記号(%)は、何も一致しました。だからあなたは、シャツの色が一致するすべてのクライアントを探しています

<ANYTHING>red<ANYTHING> 

これは検索条件が互いに含まれていない限り、これで動作します。

    • 赤ですから、次した場合の色が
    • はその後、 "%赤%" は、結果として、すべての3つのバリエーションが得られます探し

  • をlightred darkred。

    DBスキーマの表示方法やレコード数に応じて、別のエンティティとして「ShirtColors」があり、それをクライアントにリンクさせる方が簡単かもしれません。

    UPDATE:

    ように「赤」、「darkred」で上記のように、あなたはケースを持っていて、アプローチ「列として短い色」に固執する場合:

    • 追加分離前、間及び後の色: "赤、青、darkred、"
    • 検索キーワード:

      Client.where( '?のようなシャツ'、 "#{色}")

    +0

    にスポット!私はすべてを試しましたが、「真実」を得続けました。ありがとう! – Sylar

    +1

    問題ありません。私は、検索用語が互いに含まれている可能性がある場合の答えを更新しました。 –