2011-06-10 100 views
6

这可能是一个非常简单的修复,但我一直未能找到答案。Ruby on Rails在URL中传递参数

我的应用程序有订单和任务。订单有很多任务。当用户单击显示订单视图中的新任务,它通过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 %> 

但它不工作。

+0

在':value => @ order_id'中输入错误。不应该是':value => @ order.id'? – spektom

回答

2

can do

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

或者,捕捉值(与paramsin the controller并将其分配给@order_id那里。

+0

辉煌,工作一种享受! Jx –

+1

更好地让它成为一个隐藏的领域虽然:http://apidock.com/rails/ActionView/Helpers/FormHelper/hidden_​​field – Jakub

+0

已经完成:) –

-1

您正在做这个错误,这是一个大交易在轨道,其中convention-over-configuration是一个如此重要的理想。

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

/orders/:order_id/tasks/new 

而且你的路线应该正是如此配置:

resources :orders do 
    resources :tasks 
end 

你应该[近]从来没有发现自己在查询字符串中传递记录ID。事实上,你几乎从不会在Rails中发现自己使用查询字符串。

+7

嵌套资源并不总是合适的。有些人认为他们从不适合,但我不会在这里开始这个论点。即使你认为他们有时是合适的,但从任务的订单而非关联关系的问题来看,并不是100%清楚。我同意这是一个很好的*选项*,但我反对调用其他选项“绝对是**错误的方式**在Rails中执行此操作”,引用您的其他评论。考虑一下,例如,“订单”是否是任务的可选字段。 –

相关问题