2011-03-30 75 views
2

有关系的设置,如:的ActiveRecord仍然保存父对象,如果对儿童的验证失败

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
    validates_presence_of :first_name 
end 

p = Parent.new 
p.children.build 

p.save 
=> false 

p.errors 
=> {:children => ["is invalid"]} 

有没有办法让孩子对象上的验证,但没有自己的失败验证模块保存的家长吗?

+0

这解决了我要问的问题 - 我不知道,这是默认的行为(即残疾儿童阻塞父) - 你能确认是这样的话? TY – 2011-08-27 11:30:56

回答

2

看看save(options={})ActiveRecord::Validations

您可以通过:validate => false来保存(),这会跳过valid?的呼叫。

这也将跳过对父对象的任何验证,所以如果父对象也有验证,您可能需要做更多的事情。

Source

0

这不是轨道的风格,但它回答你的问题。因此,只要通过自己管理协会:

p = Parent.new 
p.save 
c = Children.new(:parent_id => p.id) 
c.save => 'first name can't be blank" 
相关问题