2016-04-28 7 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でネストされた属性です。私たちが抱えている問題は、addresscustomerビュー内で誤って変更された場合(例:add_line)、エラーが表示されないことです(顧客コントローラに@customer.update_attributes)。このような方法でネストされた属性を設定する方法はありますか?nil add_lineは更新に失敗しますか?

一つ、あなたがAddressモデルでbelongs_to :customerが必要であることを覚えておいてください:

答えて

1

2つのことは、あなたのオリジナルのポストで私の目を引きました。

二つは、あなたは、モデル内のbelongs_toのが既に存在し顧客モデル

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

に検証を追加する必要があります。 'reject_if'はモデル'アドレス 'の検証と重複していますか? 'address_invalid'は' address'モデルの検証を繰り返します。 – user938363

+0

私たちは、 'add_line'が' address'モデルでnilであれば、コントローラは静かに渡す代わりにエラーを発生させなければならないという問題があります。 '!'を試してください。ネストされたモデルに妥当性検査の失敗があると、エラーは発生しません。 – user938363

+0

'Customer'モデルの検証メソッドで、エラー/エラーが発生しますか? –

関連する問題