如何通过Rails 3中的表单提交可选的嵌套资源?
问题描述:
使用simple_form的Iam。用户可以创建一条消息。或者,他们可以附加一个联系人。现在,如果他们没有附加联系人,新的联系人仍然创建?如何通过Rails 3中的表单提交可选的嵌套资源?
如何在填写表单的联系人部分时只关联并创建新的联系人?
这是我现在使用的形式:
1 = simple_form_for @message, :remote => true do |f|
2 #message_form
3 = f.error_messages
4 %p
5 = f.input :account_name, :url => autocomplete_account_name_messages_path, :size => 40, :as => :autocomplete
6 %p
7 = f.input :subject
8 %br
9 = f.input :body, :as => :text, :input_html => { :class => 'autogrow', :rows => 5, :cols => 30, :maxlength => 140 }
10 = hidden_field_tag :sender_id, params[:sender_id]
11 = hidden_field_tag :receiver_id, params[:id]
12
13 = f.submit 'Give'
14 = f.submit 'Request'
15
16 #add_contact_btn
17 = link_to "Add Contact"
18
19 #contact_form
20 = simple_fields_for :contact do |fc|
21 %p
22 = fc.input :first_name
23 %p
24 = fc.input :last_name
25 = fc.input :email
26 = fc.input :title
27 = fc.input :office_phone
答
这应该在你的模型来完成,是这样的:你喜欢
accepts_nested_attributes_for :contact, :allow_destroy => true, :reject_if => lambda { |c| c[:first_name].blank? && c[:last_name].blank? }
或者是其他条件。
肮脏的方式,而Rails的错误正在修复。在你的型号中:
after_save :check_nil_contact
def check_nil_contact
if contact.first_name.blank?
contact.destroy
end
end
好吧让我试试看! – Angela
该关联应该是消息has_one联系还是消息belongs_to联系? – Angela
我总是有'has_one'like在这里:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html但我不认为它有所作为 – apneadiving