Rails link_to传递:从show到另一个控制器动作的id

时间:2017-03-07 19:28:53

标签: ruby-on-rails link-to

我在show.html.erb中查看了1个产品,下面有一个链接,上面写着“查看该公司的其他产品”。此link_to连接到同一控制器中的另一个非restful操作,该控制器从DB中检索同一公司的其他产品,如show.html.erb中所示。

可以link_to将show中当前产品的id传递给它的渲染动作吗?我是rails的新手,如果问题没有意义,请告诉我。我不确定是否也需要定义路线。感谢。

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'

2 个答案:

答案 0 :(得分:0)

你想做这样的事情:

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

路线:

resources :products

答案 1 :(得分:0)

我最后通过将show中的对象id通过link_to传递给非平静的动作来解决它。

如果#show中的整个@company_products可以原样传递,我可以接受建议,因为我首先发现该公司是否还有其他产品,如果有的话,只传递一个id在link_to和controller#company中再次运行查询以获取要显示的所有产品的相同数据。所以两次运行相同的查询不是DRY。

controller#show与最初发布的内容保持一致。

的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中,列表就会显示出来。