2017-08-31 66 views
0

我想基於它給出的標籤在配方上實現搜索功能。我遇到了一些問題,試圖瞭解如何加入它們以及代碼的準確位置。Rails通過標籤搜索帖子(標籤)

這是我的食譜型號:

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 

我得到它的工作,所以我能夠用領域,如recipe_namerecipe_descriptionserving_size

搜索我想要未來做到的是搜索基於許多標籤有祕方:

這是RecipeController

我的索引行動

我嘗試了幾種方法去解決它,但我似乎無法弄清楚,我已閱讀activeRecord指南中的joins方法。

這裏是我已經試過,不知道爲什麼,我不是...以下

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