ActiveRecord все еще сохраняет родительский объект, если проверки на дочерних элементах не удаются - PullRequest
2 голосов
/ 30 марта 2011

С настройкой отношений, как:

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

Есть ли способ сохранить проверки на дочернем объекте, но не потерпеть неудачу при проверке блокировки родительского объекта?

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Взгляните на save(options={}) в ActiveRecord::Validations.

Вы можете передать :validate => false для сохранения (), которое пропустит вызов до valid?.

Это также пропустит любые проверки родительского объекта, поэтому вам, возможно, придется сделать что-то более сложное, если родитель также имеет проверки.

Источник

0 голосов
/ 08 декабря 2012

Это не стиль рельсов, но он отвечает на ваш вопрос.Так что просто управляйте ассоциацией самостоятельно:

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