Comment puis-je utiliser un seul formulaire dans une vue pour plusieurs modèles de Rails 3?

StackOverflow https://stackoverflow.com/questions/5408408

Question

J'ai un formulaire unique.

Que forme, est actuellement à la Vue du modèle de Message.

Parfois, je veux être en mesure d'associer un Contact (nom, prénom) avec ce Message.Le Contact est son propre Modèle.

Lorsque le formulaire est soumis, le Message a un contact_id attribut.Je voudrais que contact_id être associés, mais aussi de créer un nouveau Contact.

Comment dois-je faire dans Rails 3?

Était-ce utile?

La solution

Il semble que vous souhaitez à la fois le Contact et Message d'objets créés à partir de la même forme et les faire associés.Comme je vous l'ai dit dans une précédente question.form_for peut prendre à la fois autonome valeurs et même d'autres objets de valeurs.

_form.html.erb

<% form_for :message do |f| %>
  <%= f.test_field :some_field %>
  ..
  ..
  <%= text_field :contact, :first_name %>
  <%= text_field :contact, :last_name %>
  <%= f.submit %>
<% end %>

messages_controller.rb

def new
  @message = Message.new
  @contact = Contact.new
end

def create
  @message = Message.new(params[:message])
  @contact = Contact.new(params[:contact])
  @contact.message = @message
  if @contact.save # saves both contact and message if has_one relation is given in models
    ..
  else
    ...
  end
end

Mais ceci étant dit, il est préférable d'utiliser Imbriqué modèle.Pour cela, vous devez écrire du code centré sur contact.

contacts_controller.rb

def new
  @contact = Contact.new
  @contact.message.build
end

def create
  @contact = Contact.new(params[:contact])
  if @contact.save
    ..
  else
    ..
  end
end

_form.html

<% form_for :contact do |f| %>
  <% f.fields_for :message do |p| %>
    <%= p.text_field :some_field %>
    ...
  <% end %>
  <%= f.text_field :first_name %>
  <%= f.text_field :second_name %>
  <%= f.submit %>
<% end %>

Pour cela, vous aurez à spécifier accepts_nested_attributes_for :message en Contact.rb

Autres conseils

Avec un formulaire modèle imbriqué.

Jetez un œil à: http://asciicasts.com/episodes/196-nested-model-form-part-1

Il est basé sur Rails 2, mais il n'y a pas grand chose à faire pour rendre le code compatible avec Rails 3.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top