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

Rails link_to pass :id from show to another controller action

我正在 show.html.erb 中查看 1 件产品,下面有一个 link,上面写着 "View other products from this company"。此 link_to 连接到同一控制器中的另一个非 restful 操作,该控制器从数据库中检索同一公司的其他产品,如 show.html.erb.

中所示

能否link_to 将当前产品的 :id 传递给正在渲染的 show 动作?我是 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'

您想做这样的事情:

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

路线:

resources :products

我最终通过 link_to 将 show 中对象的 :id 传递给非 restful 操作来解决它。

如果 #show 中的整个 @company_products 可以按原样通过,我愿意接受建议,因为我首先要查找该公司是否有任何其他产品,如果有,则通过id only in link_to and in controller#company again 运行 查询以获取要显示的所有产品的相同数据。所以运行两次相同的查询不是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,列表只是显示。