验证和嵌套表单

时间:2012-02-14 18:26:39

标签: ruby-on-rails nested-attributes

我的ruby on rails 3.0.3应用程序在向客户展示购物车时显示空地址表单。

addresse模块询问是否存在所有字段:

validates :nom,:prenom,:adresse,:code_postal,:ville,:email, :presence => true

如果我验证一个空表单,它仍然有效,尽管验证条件。 我填写表格,转到下一页并返回现在填充的创建表单。现在如果我删除一个字段,则会考虑valiate。

以下是show动作中嵌套表单的空地址创建代码:

if (@cartshowed.adresse_client.nil?)
        @cartshowed.build_adresse_client
      end

我想当使用空地址验证时会被忽略,但是只要我验证了已经有效的地址的数据,它就能正常工作。

如何在创建地址时验证工作,而不仅仅是版本?

PS:版本/创建是通过相同的控制器在同一页面上完成的。版本不是为了存在而是有效。

编辑:经过多次尝试后,我认为我的问题是通过嵌套表单创建地址完全覆盖了地址中的验证字段。 我怎样才能以嵌套的形式验证限制?

2 个答案:

答案 0 :(得分:1)

如果Addresse是嵌套属性(即Cart has_one Address),也许你应该使用允许你添加accepts_nested_attributes_for过程的:reject_if

accepts_nested_attributes_for :addresse, :reject_if => :any_blank 

我无法给出比Ryan Daigle更好的例子:

http://archives.ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#method-i-accepts_nested_attributes_for

答案 1 :(得分:0)

似乎只要我使用reject_if,我的孩子模型的验证就不会被完全考虑在内。删除reject_if解决了我所有的问题。现在,在控制器的update_attributes步骤中,正确拒绝了一个空表单或不符合验证要求的表单。