2016-04-28 112 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'模型中的驗證方法是否會失敗/出錯? –

相關問題