2016-06-14 8 views
0

私が取り組んでいるプロジェクトのカスタム検索方法を作成しようとしています。理想的には、結果をフィルタリングするためにユーザー入力と無制限のキーワードを持つことができるようにしたいと思いますが、私はちょうどカップルのために解決するつもりです。私は自分のコードをただ一つのキーワードのために働いています。ここに私のモデルのコードは次のとおりです。複数のキーワードでクエリを呼び出す

class Food < ActiveRecord::Base 
    has_many :meal_items, inverse_of: :food_for_meal, foreign_key: 'food_for_meal_id' 
    has_many :user_meals, through: :meal_items 

    def self.search (key) 
    Food.where("description LIKE ?", "%#{key}%") 
    end 
end 

ここでは、複数のキーワードを使用するには、私が作った一つの試みである:

class Food < ActiveRecord::Base 
    has_many :meal_items, inverse_of: :food_for_meal, foreign_key: 'food_for_meal_id' 
    has_many :user_meals, through: :meal_items 

    def self.search (key) 
    keys = key.split('+') 
    Food.where("description LIKE ?", "%#{keys[0]}%") 
      AND ("description LIKE ?", "%#{keys[1]}%") 
    end 
end 

私は等々括弧や引用符の中と外のものを移動しようとしたとしているが、正しい構文を釘付けにすることはできません。どんな助けもありがとう。

+1

フルテキスト検索を検索したいと思われるようです。 PGまたはMySQLを使用していますか? – mmichael

+0

@ mmichael PG。全文検索に精通していない。 – Atache

+1

[Textacular gem](https://github.com/textacular/textacular) – mmichael

答えて

1

.whereはSQLフラグメントをとるので、ANDを入れてください。

Food.where("description LIKE ? OR description LIKE ?", "%#{keys[0]}%", "%#{keys[1]}%") 

あなたは、n個のためのキーのような何かができる:

Food.where((['description LIKE ?'] * keys.size).join(' OR '), *keys.map{ |key| "%#{key}%" }) 

はEDIT:あなたはおそらくしたいOR私の答えでコメント投稿で指摘したように。

+1

を見てください。「OR」ではないと思います。 – mmichael

+0

あなたは正しいです、私は元の質問に巻き込まれました。 – Leito

+0

ありがとうございました。 – Atache

関連する問題