2017-08-31 8 views
0

私は与えられたタグに基づいてレシピ上で検索機能を実装しようとしています。私は、それらがどのように動作するのか、コードがどこに正確に配置されるのかを理解しようとする問題にぶつかっています。Railsはラベル(タグ)で投稿を検索します

これは私のレシピのモデルである:私はそれは私が次の達成しようとしている何recipe_namerecipe_descriptionserving_size

などの分野で検索することができるよそう働いてしまった

class Recipe < ApplicationRecord 
    has_many :ingredients 
    has_many :directions 
    has_many :labels 

    def self.search(search) 
    where("recipe_name ILIKE ? OR recipe_description ILIKE ? 
    OR serving_size ILIKE ?", "%#{search}%", "%# 
    {search}%", "%#{search}%") 
    end 

end 

検索ですそれは持っている多くのラベルに基づいてレシピ:

これはRecipeController

ための私のindexアクションであります

私はそれについていくつかの方法を試しましたが、私はそれを理解できないようです。私はjoinsメソッドをactiveRecordガイドで読んだことがあります。ここで

は、私はすでに試みた何か、ではないことを確認なぜイム以下ではありません私は検索する合流使用しての私の理解で間違ったつもりどこ...

def self.search(search) 
     where("recipe_name ILIKE ? OR #{Recipe.joins(:labels).where(labels.label_name = "?")} ILIKE ? OR serving_size ILIKE ?", "%#{search}%", "%#{search}%", "%#{search}%") 
    end 

は、誰もが指摘することはできますか?

答えて

0

あなたの構文が間違っています。

あなたが達成しようとしている何のための正しい構文は次のとおりです。

def self.search(search) 
    joins(:labels).where("recipe_name ILIKE ? OR labels.label_name ILIKE ? OR serving_size ILIKE ?", "%#{search}%", "%#{search}%", "%#{search}%") 
end 

はちょうどあなたがこのクエリから重複した結果を得ることがあることに注意してください。それを修正するには、それの最後に#uniqの呼び出しを追加します。

def self.search(search) 
    joins(:labels).where("recipe_name ILIKE ? OR labels.label_name ILIKE ? OR serving_size ILIKE ?", "%#{search}%", "%#{search}%", "%#{search}%").uniq 
end 

あなたはより多くの詳細についてはthis Railsのガイドを見てみることができます。

+0

ご迷惑をおかけして申し訳ありません。素晴らしい答え:) – MattEhrlich

関連する問題