在Rails 3中,如果我具有用于创建新记录的相同的_form部分,该如何使其保持DRY状态?

问题描述

| 我有一个创建新记录的表格。 我想在不同模型的视图中使用该部分。 我怎么做?似乎部分表格的控制器也应该可重用。 例如,这就是我所拥有的。我在我的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|
这样,您不必在不相关的控制器中保留实例变量。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...