Ruby on Rails在URL中传递参数

6

这可能是一个非常简单的修复,但我还没有找到答案。

我的应用程序有订单和任务。订单有许多任务。当用户在显示订单视图中点击新任务时,它会传递order.id:

<%= link_to "New Task", new_task_path(:order_id=> @order.id) %>

这个URL显示:
/tasks/new?order_id=1

我不知道如何提取并在我的表单中使用它?我尝试过:

<%= f.text_field :order_id, :value => @order_id %>

但是它没有起作用。

“:value => @order_id” 中有错别字。应该是 “:value => @order.id” 吗? - Michael Spector
2个回答

2

可以做

<%= f.text_field :order_id, :value => params[:order_id] %>

另外,你可以在控制器中使用 params 捕获 并将其赋值给 @order_id

1
最好将其设置为隐藏字段:http://apidock.com/rails/ActionView/Helpers/FormHelper/hidden_field - Jakub
@Jenny 请看我的回答。这在 Rails 中绝对是错误的方法 - user229044

-1

你做错了,这在Rails中是一个大问题,因为惯例优于配置是如此重要的理念。

如果一个订单有多个任务,你的路由应该像这样:

/orders/:order_id/tasks/new

你的路由应该这样配置:

resources :orders do
  resources :tasks
end

在编程过程中,你几乎不应该通过查询字符串传递记录的 ID。事实上,在 Rails 中,你几乎不应该使用查询字符串。


7
嵌套资源并不总是合适的。有些人认为它们从来都不合适,但我不想在这里开始争论。即使您认为它们有时是合适的,从问题中并不能百分之百清楚地看出订单对任务是所有权而不是关联关系。我同意这是一个很好的选项,但我反对将其他选项称为“在Rails中绝对错误的方法”,引用您的另一个评论。请考虑,例如,“订单”是任务上的可选字段。 - Craig Stuntz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接