【问题标题】:Ruby on Rails Passing Parameter In URLRuby on Rails 在 URL 中传递参数
【发布时间】:2011-06-10 12:57:19
【问题描述】:

这可能是一个非常简单的解决方法,但我还没有找到答案。

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

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

网址显示:

/tasks/new?order_id=1

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

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

但它不起作用。

【问题讨论】:

  • :value =&gt; @order_id 中的错字。不应该是:value =&gt; @order.id吗?

标签: ruby-on-rails routes


【解决方案1】:

can do:

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

或者,捕获值(使用paramsin the controller 并将其分配给@order_id

【讨论】:

【解决方案2】:

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

如果一个订单有很多任务,你的路线应该是这样的:

/orders/:order_id/tasks/new

你的路线应该这样配置:

resources :orders do
  resources :tasks
end

您应该[几乎] 永远不会发现自己在查询字符串中传递了记录 ID。事实上,你几乎不应该在 Rails 中使用查询字符串。

【讨论】:

  • 嵌套资源并不总是合适的。有些人认为他们永远不合适,但我不会在这里开始争论。即使您认为它们有时是合适的,也不是 100% 清楚订单到任务是所有权而不是关联关系的问题。我同意这是一个很好的选项,但我反对调用其他选项“在 Rails 中这样做绝对是错误的方式”,以引用您的其他评论。考虑一下,例如,如果“订单”是任务的可选字段。
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多