【问题标题】:ActiveRecord still save parent object if validations on children fail如果对子项的验证失败,ActiveRecord 仍会保存父对象
【发布时间】:2011-03-30 16:29:31
【问题描述】:

使用如下关系设置:

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"]}

有没有办法保留子对象的验证,但不让其失败的验证阻止父对象的保存?

【问题讨论】:

  • 这解决了我要问的问题——我不知道这是默认行为(即无效的孩子阻止父母)——你能确认是这种情况吗? TY

标签: ruby-on-rails validation activerecord


【解决方案1】:

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

您可以将:validate =&gt; false 传递给save(),这将跳过对valid? 的调用。

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

Source

【讨论】:

    【解决方案2】:

    这不是 Rails 风格,但它回答了你的问题。所以只需自己管理关联:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多