0
On Rails 4.我正在製作一個帶有產品的網站。這些產品可以有很多標籤。型號:Ruby on Rails - link_to帶標籤過濾器
class Product < ActiveRecord::Base
has_many :tags, through: :product_tags
class Tag < ActiveRecord::Base
has_many :products, through: :product_tags
我試圖讓一個應用廣泛的導航欄,其中用戶可以單擊每個導航鏈接帶他/她到產品指標,產品將被過濾根據從標籤名鏈接。到目前爲止,我確實有這方面的工作:
application.html.erb
<li><%= link_to "Pencils", products_path(tag: "Pencils") %></li>
products_controller.rb
def index
if params[:tag]
@products = Product.joins(:tags).order('id').page(params[:page]).per(20).where(tags: { name: params[:tag] })
else
@products = @q.result(distinct: true).order('id').page(params[:page]).per(20)
end
end
(在「其他」部分使用搜查,也有標題中輸入搜索詞裏面的表單,如果你不希望使用的導航鏈接)。
我的麻煩來了我想返回有兩個標籤我想過濾的產品。例如,假設我的標籤是「藍色」和「鉛筆」,我想製作一個link_to,可以找到所有藍色鉛筆產品。我嘗試了一些東西,包括嘗試使用.split(),但無法獲得我需要的結果。如果有其他方法,不想在這裏使用寶石。謝謝你的幫助!
這是一個很好的想法,沒考慮兩個不同的where子句。這是行不通的,當我嘗試它時沒有任何返回(沒有錯誤,只是沒有列出任何產品)......不知道爲什麼...會繼續嘗試幾件事。 – Rachel9494
是的,對,我認爲它不會工作......你可以用'includes'而不是'joins'來嘗試嗎? ...我細化連接只會匹配標記記錄的延遲加載,但包括應包含所有標記記錄。或者我可以通過我的帽子說話... – SteveTurczyn
謝謝你繼續幫助我!嘗試「包括」也沒有工作......必須缺少一塊難題。 – Rachel9494