2011-08-05 65 views
1

我有一個名爲orders的控制器。在該控制器中有一個newcreate的操作。用戶可以從訂單/新頁面創建訂單,但我也希望他們能夠從主頁創建訂單。以下是我已經試過這樣做遠遠Rails發佈到另一個控制器

<%= form_tag :controller => "orders", :action => "create" do %> 
    <%= text_field_tag :first_name, 'Test1' %> 
    <%= text_field_tag :last_name, 'Test2' %> 
    <%= submit_tag %> 
<% end %> 

但是,它拒絕的信息,並把我回orders/new頁面。拒絕它的原因是因爲我在這兩個字段上有一個validates_presence_of,並且信息由於某種原因未被傳遞。

有什麼建議嗎? 在此先感謝

+0

你有3個不同的答案,但他們都相同的事情。帶你選擇:) – jamesc

回答

1

你正在發佈到該控制器,但形式是通用的(沒有分配給像form_for模型),所以參數進來只是params [:名字] params [:last_name]。在這種情況下,您必須手動將這些值映射到Order模型的新實例。

0

與您的看法相反。您的first_name和last_name參數實際上正在傳遞到創建操作中。只是它們以你不期待的方式被傳遞 檢查你的日誌文件中的創建操作,你會在那裏看到它們。

你的問題在於這樣的事實,即字段不是嵌套在您的創建操作期望的順序params中。

我的意思是,當你實際上在創建動作中需要params [:first_name]和params [:second_name]時,你的創建動作會期待params [:order],這不是你想要做的。

解決方案?

巢訂單哈希中的字段,像這樣

<%= text_field_tag :order[:first_name], 'Test1' %> 
    <%= text_field_tag :order[:last_name], 'Test2' %> 

作業已完成:)

+0

這是爲什麼被拒絕? – jamesc

2

@Kreek,解釋這個問題很好。比手動處理這些參數更好的辦法是改變你的形式是這樣的:

<%= form_for Order.new do |f| %> 
    <%= f.text_field :first_name %> 
    <%= f.text_fiels :last_name %> 
    <%= f.submit %> 
<% end %> 
+0

不錯,但我會在呈現這個表單的行爲中設置對象,並從那裏引用它。這比「你必須這樣做」更接受公認的標準。 –

+0

這很好,但問題是關於使用form_tag,這也可以使用。訂單創建操作將處理Order.new。只需將訂單哈希中的text_fields嵌套即可 – jamesc

相關問題