2011-06-12 58 views
2

我有一個表單來創建一條新記錄。在Rails 3中,如果我有相同的partial _form來創建新記錄,我該如何保持乾燥?

我有這樣的偏愛,我想在不同的模型中使用視圖。

我該怎麼做?似乎部分表單的控制器也應該是可重用的。

例如,這就是我所擁有的。我從view/users/show和view/message/new中調用了這個部分,所以好像我需要在用戶控制器和消息控制器中創建一個@message和@contact實例。感覺不幹:

= semantic_form_for @message do |f| 
    2 #message_form 
    3  = f.error_messages 
    4  %p 
    5  = f.label :account 
    6  %br 
    7  = f.text_field :account 
    8  %p 
    9  = f.label :subject 
10  %br 
11  = f.text_field :subject 
12  %p 
13  = f.label :body 
14  %br 
15  = f.text_area :body 
16  = hidden_field_tag :sender_id, params[:sender_id] 
17  = hidden_field_tag :receiver_id, params[:receiver_id] 
18 
19  = f.submit 
20 #add_contact_btn 
21  = link_to "Add Contact", new_contact_path 
22 
23  #contact_form 
24  = form_for @contact do |fc| 
25   %p 
26   = fc.label :first_name 
27   %br 
28   = fc.text_field :first_name 
29   %p 
30   = fc.label :last_name 
31   %br 
32   = fc.text_field :last_name 

回答

0

將部分保留在共享文件夾中,並在需要時引用它。

例如,如果你想使用shared/_form.html.{erb,haml}部分,你可以這樣寫:

render 'shared/form' 

控制器是不依賴於模型。您可以在單個控制器中根據需要進行管理。然而,它們與觀點相關,因此請確保它們適合您的模型。


如果你每次都只是創造一個新的消息/聯繫人,你可以只在窗體本身創建它們:

= semantic_form_for Message.new do |f| 

# ... 

= form_for Contact.new do |fc| 

這樣,您就不必保持一個實例變量你周圍無關的控制器。

+0

我可以用控制器做什麼?有共享控制器嗎? – Angela 2011-06-12 19:58:12

+0

@Angela,更新了答案。您可以擁有一個控制器,該控制器使用您的共享視圖/表單根據需要創建/更新儘可能多的不同模型,但您需要一種方式告訴控制器表單處理的是哪種模型。也許是'POST'參數? – 2011-06-12 21:24:57

+0

嗨,對,我想這就是我的意思。什麼決定了表格內的控制器?例如,我正在創建一個新的消息記錄。讓我更新上面...謝謝你的幫助.... – Angela 2011-06-13 02:02:34

相關問題