2017-03-07 40 views
0

我在查看show.html.erb中的1個產品,並且下面有一個鏈接顯示「查看該公司的其他產品」。這個link_to連接到另一個不相干的動作,它在同一個控制器中從DB檢索show.html.erb中顯示的同一公司的其他產品。Rails link_to傳遞:從展示到另一個控制器的動作

可以link_to將show中當前產品的id傳遞給它正在渲染的動作?我是新手,如果問題沒有意義,請讓我知道。我不確定是否需要定義路線。謝謝。

products_controller.rb

def show 
@company_products = Product.by_company 
end 

show.html.erb

<%= link_to "View other products from this company", company_products_path(:anchor => "#{@company_products}") %> 

的routes.rb

get '/company_products_' => 'products#company_products' 
+0

你想要有RESTFUL路線或保持非RESTFUL你有嗎? – the12

+0

我不確定RESTFUL路線如何工作。建議 – Means

+0

RESTFUL路線按照gwalshington的建議通過鍵入資源:產品。令人困惑的是,show.html.erb這個名字意味着您擁有平靜的路線(當您添加RESTFUL路線時,Rails自動填充爲可能的URL /動作),如果沒有的話。你應該找到一個解釋這個的教程,我真的無法在評論中正確解釋它。這太長和複雜了。 – the12

回答

0

我最終通過了解決它。

如果#show中的整個@company_products可以通過,因爲我首先發現是否有該公司的任何其他產品,如果存在,僅在link_to中傳遞一個ID並且在控制器#公司再次運行查詢以獲取要顯示的所有產品的相同數據。所以兩次運行相同的查詢不是DRY。

控制器#顯示與原始發佈相同。

的routes.rb

resources :products do 
    get :company, on: :member 
end 

show.html.erb

<%= link_to "View other products from #{@company_name}", company_product_path(@product.company_id) %> 

控制器#公司

def company 
    @products_of_company = Product.where(company_id: params[:id]) 
end 

現在company.html.erb,只是顯示的列表。

0

你想要做這樣的事情:

@company_products.each do |company| 
    link_to "View other products from this company", products_path(company) 
end 

路線:通過的link_to對象的ID在展會上非寧靜行動:

resources :products

+0

你提到的是索引視圖。我在show中要求link_to,所以無論如何我擁有當前的產品。 link_to通過傳遞散列產品或product.id根本不顯示。沒有錯誤也。有什麼建議麼。 – Means

相關問題