Как использовать одну форму в представлении для нескольких моделей в Rails 3? - PullRequest
1 голос
/ 23 марта 2011

У меня есть одна форма.

Эта форма в настоящее время находится в представлении для сообщения модели.

Иногда я хочу иметь возможность связать контакт (имя, фамилию) с этим конкретным сообщением. Контакт является собственной моделью.

Когда форма отправлена, Сообщение имеет атрибут contact_id. Я хотел бы, чтобы этот contact_id был связан, но также чтобы создать новый контакт.

Как мне это сделать в Rails 3?

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Кажется, что вы хотите, чтобы объекты Contact и Message создавались из одной формы и связывали их.Как я уже говорил вам в предыдущем вопросе.form_for может принимать как отдельные значения, так и значения других объектов.

_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

Но, как говорится,лучше использовать модель Nested form.Для этого вам нужно написать код с центром в 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 %>

Для этого вам потребуетсянужно указать accepts_nested_attributes_for :message в Contact.rb

0 голосов
/ 23 марта 2011

С вложенной модельной формой.

Посмотрите на: http://asciicasts.com/episodes/196-nested-model-form-part-1

Он основан на Rails 2, но для того, чтобы сделать код совместимым с Rails 3, не нужно много делать

...