在嵌套属性验证失败时如何引发错误

时间:2016-04-28 03:28:59

标签: ruby-on-rails-4

以下是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中的嵌套属性。我们遇到的问题是,如果在address视图中错误地修改了add_line(例如,只有customer),则没有错误(客户控制器中的@customer.update_attributes)弹出起来。有没有办法以这种方式设置嵌套属性nil add_line将无法更新?

1 个答案:

答案 0 :(得分:1)

有两件事引起了我的注意:

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

二,您需要在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