我有一个表格。
该表单目前位于模型消息的视图中。
有时,我希望能够将联系人(名字,姓氏)与该特定消息相关联。联系方式是它自己的模型。
提交表单时,Message具有contact_id属性。我希望将contact_id关联起来,还要创建一个新的联系人。
如何在Rails 3中执行此操作?
答案 0 :(得分:2)
您似乎希望从同一表单创建的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
但话虽如此,最好使用嵌套表单模型。为此,您必须编写以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 %>
为此,您必须在Contact.rb中指定accepts_nested_attributes_for :message
答案 1 :(得分:0)
使用嵌套模型表单。
看看: http://asciicasts.com/episodes/196-nested-model-form-part-1
它基于Rails 2,但为了使代码与Rails 3兼容,没有太多工作要做。