В Rails 3, если у меня есть та же частичная _form для создания новой записи, как мне сохранить ее СУХОЙ? - PullRequest
2 голосов
/ 12 июня 2011

У меня есть форма для создания новой записи.

У меня есть то частичное, которое я хотел бы использовать из вида в разных моделях.

Как мне это сделать? Кажется, что контроллер для частичной формы также должен быть многоразовым.

Например, это то, что у меня есть. Я вызываю эту часть как из моего представления / 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

1 Ответ

0 голосов
/ 12 июня 2011

Храните частичное в общей папке и обращайтесь к нему всякий раз, когда вам нужно.

Например, если вы хотите использовать партиал shared/_form.html.{erb,haml}, вы должны написать:

render 'shared/form'

Контроллеры не привязаны к моделям. Вы можете управлять столько, сколько вам нужно в одном контроллере. Однако они привязаны к видам, поэтому убедитесь, что они подходят для ваших моделей.


Если вы просто создаете новое сообщение / контакт каждый раз, вы можете просто создать их в самой форме:

= semantic_form_for Message.new do |f|

# ...

= form_for Contact.new do |fc|

Таким образом, вам не нужно хранить переменную экземпляра в ваших не связанных контроллерах.

...