2011-06-10 148 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中執行此操作」,引用您的其他評論。考慮一下,例如,「訂單」是否是任務的可選字段。 –

相關問題