问题描述
|
我有一个创建新记录的表格。
我想在不同模型的视图中使用该部分。
我怎么做?似乎部分表格的控制器也应该可重用。
例如,这就是我所拥有的。我在我的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
解决方法
将局部文件保存在共享文件夹中,并在需要时进行引用。
例如,如果要使用
shared/_form.html.{erb,haml}
部分,则应编写:
render \'shared/form\'
控制器与模型无关。您可以在一个控制器中根据需要管理任意多个。它们与视图相关,因此请确保它们适合您的模型。
如果您每次只是创建新的消息/联系人,则可以在表单本身中创建它们:
= semantic_form_for Message.new do |f|
# ...
= form_for Contact.new do |fc|
这样,您不必在不相关的控制器中保留实例变量。