如何通过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 
+0

好吧让我试试看! – Angela

+0

该关联应该是消息has_one联系还是消息belongs_to联系? – Angela

+0

我总是有'has_one'like在这里:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html但我不认为它有所作为 – apneadiving