Почему мои методы before_validation не запускаются, если некоторая валидация ограничена? - PullRequest
1 голос
/ 14 февраля 2011

В моей модели у меня есть несколько методов для заполнения атрибутов Invoice до его проверки:

validates :account_id, :presence => true
validates :account_address, :presence => true
validates :number, :presence => true
validates :number, :uniqueness => true, :scope => :client_id

before_validation :generate_number, :associate_addresses, :on => :create

def generate_number
  self.number = self.client.invoices.count + 1
end

def associate_addresses
  self.account_address = self.account.addresses.first
end

А в контроллере:

@invoice = @account.invoices.build(:client_id => @client.id)

if @invoice.save
  #it saved
end

Моя проблема заключается в том, что методы associate_addresses и generate_number запускаются только в том случае, если я удаляю аргумент :scope => :client_id в проверке :number.

Почему он пропускает обратные вызовы before_validation из-за этого?

Работа в Rails 3.0.3

Спасибо! Спасибо.

1 Ответ

2 голосов
/ 14 февраля 2011

Не знаю, почему он пропускает before_validation методы, но для проверки uniqueness проверки в Rails 3 вы должны использовать следующий синтаксис:

validates :number, :presence => true, :uniqueness => { :scope => :client_id }

Полагаю, ваш синтаксис пытается добавить scope проверки, которой не существует. Вероятно, есть ошибка Rails, из-за которой пропускаются методы before_validation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...