2016-07-18 14 views
0

結合列の文字列全体を検索したいと思います。私は、この結合列で検索したいRailsは結合列の文字列全体を検索します

def name 
[design.name, color, code_name(code)].join(' ').to_s 
end 

:デザイン、色、コードおよびインデックスページで、私はモデルのメソッドを使用して一つの場所でそれらを示しています。私は列を持つテーブルの製品を持っています。例: 結合列: "Strips Black Plain" 検索フィールドに "Strips Bl"と入力すると、一致するすべての文字列を取得します。例えば:ブラックPlain2ストリップ、ブルー平原は、ストリップなど

私は1つの列の検索は、私がモデル法を使用した時:

def self.search(letter) 
    if letter 
     where("colorLIKE ?", "%#{letter}%").order(:created_at) 
    else 
     all 
    end 
私はいくつかの列で同時に検索することができます知っている

が、個別に演算子||を使用します。しかし、この列の検索はどのようにして1列のようになりますか?

+0

私はあなたがこの記事でhttp://stackoverflow.com/questions/3947273/rails-3-using-like-to-search-a-combined-2-columnsと、このポストのhttpを見てすべきだと思います。 //stackoverflow.com/questions/3866391/rails-gem-rails3-jquery-autocomplete-how-do-i-query-multiple-fields/3899006#3899006 –

答えて

0

私はこの1つのようになり、私の検索クエリを変更します

def search(keyword) 
    where("LOWER (design) LIKE LOWER(:s) OR LOWER(color) LIKE LOWER(:s) OR LOWER(code) LIKE LOWER(:s) or concat(LOWER(design), ' ', LOWER(color)) LIKE LOWER(:s)", {s: "%#{keyword}%"}) 
end 

だから、一緒に1〜2つの列を検索するには、データベースレベルでCONCATを使用するための主なアイデア。 concatenate

+0

Concatは私が探しているものです!ありがとうございました。検索列の1つが異なる表の列である場合、連結を使用する可能性はありますか?私のケースでは、column:design.nameは別のテーブルからのものです:design。そして、製品は、製品に属しています。 – Patrishio

+0

@Patrishioはそれがあなたのために働いたと聞いてうれしいです。 –

0

を解決したの詳細は、2台を組み合わせて参加します。複数の列を検索するための連結。

joins(:design).where("LOWER(designs.name) LIKE LOWER(:s) OR LOWER(color) LIKE LOWER(:s) OR LOWER(code) LIKE LOWER(:s) or concat(LOWER(designs.name), ' ', LOWER(color), ' ', LOWER(code)) LIKE LOWER(:s)", {s: "%#{letter}%"}) 
関連する問題