首页 > 解决方案 > 如何为rails在link_to中添加:id?

问题描述

我的目标是为卖家(用户)在他们的用户的销售页面(他们的销售历史页面)中创建一种方式将文件上传给买家(买家)。顺便说一句,我正在使用 Devise 作为用户角色。

我有链接,例如,我有 URL“ localhost:3000/orders/28/sales_uploads/new ”工作,所以我可以上传到特定的销售。

虽然,在用户/卖家的销售页面中,我希望他们能够将文件上传给买家(买家购买产品,卖家然后在购买后上传文件 - 每个产品/购买都是定制的),或者通过最好是销售页面,或者通过单击链接-这是我遇到问题的地方。我希望卖家单击“上传”链接,然后将他们定向到页面以上传订单文件。

在销售页面视图(views/sales_uploads/sales)中,我有

 <%= link_to "Upload", new_order_sales_upload_path(@order, order) %>

但我收到一个错误,即没有 order_id。

我怎样才能使链接链接到带有订单 ID 的订单。

我有一个

 <% @orders.each do |order| %>

所以它循环通过,我不知道为什么它不起作用。

这是我的 github https://github.com/brandnamewater/digitalcommerce

正如您将在上面提到的视图中看到的那样,我有自行车工作。我假设我在其他地方遇到了问题,可能在控制器中。虽然,我根本无法弄清楚。

以防万一,我最好链接整个应用程序,因为可能还有其他我不知道的问题导致了这种情况。

我现在只定期编码几个星期,我敢肯定这对你们中的一些人来说是非常基本的东西,但我无法弄清楚。我已经尝试了 2 个晚上,但没有其他 Google 搜索、Stack 搜索等有帮助。

标签: ruby-on-railsruby

解决方案


您正在寻找的正确代码是:

<% @orders.each do |order| %> <%= link_to "Upload", new_order_sales_upload_path(order) %> <% end %>

如果您bin/rails routes | grep new_order_sales_upload在终端中运行,它将提供一些输出,向我们展示路由助手方法以及我们需要传递给路由助手的任何参数。

对于您的情况,它将输出

new_order_sales_upload GET    /orders/:order_id/sales_uploads/new(.:format)                                            sales_uploads#new

这向我们展示了路由助手被调用new_order_sales_upload并且它需要一个参数:order_id

如果你想@order在你的视图中输出<%= @order.inspect %>你会发现那是nil因为这个实例变量没有被设置。

您的循环@orders.each正在设置一个名为order.

您的答案<%= link_to "Upload", new_order_sales_upload_path(order, @order) %>有效的原因是路由助手仅使用第一个变量order,而第二个@order变量nil未使用。

您可以从官方指南https://guides.rubyonrails.org/routing.html中阅读更多关于在 Rails 中路由的信息


推荐阅读