rails callback before_create нарушено after_validate работает - PullRequest
0 голосов
/ 05 марта 2012

У меня есть модель Printer, к которой я добавил логический столбец master.Принтер belongs_to :restaurant.Флаг master указывает, является ли этот принтер основным принтером в этом ресторане.

У меня есть метод в модели принтера:

def set_master_on_create
  if self.restaurant.printers.empty?
    self[:master] = true
  else
    self[:master] = false
  end
end

и установлен этот обратный вызов: before_create :set_master_on_create

Если я запускаю этот метод как before_create, то создание нового принтера завершится неудачно.Если я изменю обратный вызов на after_validation, создание нового объекта будет работать безупречно, даже с опцией :on => :create.

Замешивает ли Rails объект, чтобы я больше не мог изменять значения после определенной точки, которая вызовет Rollback, которую я получу?Любая помощь приветствуется.

Я на Rails 3.2.2 и sqlite в режиме разработки.

1 Ответ

1 голос
/ 05 марта 2012

Я думаю, проблема в том, что метод before_create, возвращающий false, предотвратит сохранение вашего объекта.попробуйте добавить return true

, и я предполагаю, что вы установили атрибут master следующим образом: self.master = true

def set_master_on_create
  if self.restaurant.printers.empty?
    self.master = true
  else
    self.master = false
  end

  return true
end

Если обратный вызов before_ * отменяет действие, выдается ROLLBACK,Вы также можете вызвать ROLLBACK, вызывая исключение в любом из обратных вызовов, включая ловушки after_ *.Обратите внимание, однако, что в этом случае клиент должен знать об этом, потому что обычное сохранение вызовет такое исключение, вместо того, чтобы спокойно возвращать false.http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

...