2016-04-28 81 views
0

以下是2个模型:客户和地址。客户has_one地址。如何在嵌套属性验证失败时引发错误

class Customer < ActiveRecord::Base 
    has_one :address 
    accepted_nested_attributes_for :address, :allow_destroy => true 
end 

class Address < ActiveRecord::Base 
    belongs_to :customer 
    validates :add_line, :presence => true 
end 

<% simple_form_for @customer do |f| %> 
    ..... 
    <%=f.simple_fields_for :address do |builder| %> 
    <%=render ('address', f: builder) %> 
    <% end %> 
<%end %> 

地址视图

<%=f.input :add_line %> 

addresscustomer嵌套属性。我们遇到的问题是,如果在customer视图内错误地修改了address(例如,012,),则不会出现错误(客户控制器中的@customer.update_attributes)弹出。有没有办法以这种方式设置嵌套属性nil add_line将失败更新?

回答

1

有两件事情引起了我的眼睛与你的原帖:

一,请记住,你在Address模型需要belongs_to :customer

两个,你需要添加一个验证的客户模型

class Customer < ActiveRecord::Base 
    has_one :address 
    accepted_nested_attributes_for :address, allow_destroy: true, reject_if: :address_invalid 
    private 
    def address_invalid(attributes) 
    # add custom validation code here ... 
    end 
end 
+0

有belongs_to的模型了。 'reject_if'对模型“address”中的验证是多余的? 'address_invalid'会在'address'模型中重复验证。 – user938363

+0

我们遇到的问题是,如果'add_line'在'address'模型中为零,那么控制器应该提高错误而不是默默地让它传递。如果在嵌套模型中存在验证失败,请尝试'!'并且不会引发错误。 – user938363

+0

它在'Customer'模型中的验证方法是否会失败/出错? –