Rails: Как отменить сохранение, если обратный вызов before_update возвращает false? - PullRequest
3 голосов
/ 05 марта 2011

У меня есть модель с обратным вызовом before_update.Из моего понимания before_update вызывается, когда update_attributes вызывается на экземпляре модели.Я предполагаю, что если обратный вызов before_update вернет false, запись не будет обновлена.Каждый раз, когда я звоню update_attributes, запись сохраняется, даже если before_update возвращает false.Есть ли у вас какие-либо идеи, как запретить обновление записи, если before_update возвращает false?Вот что я попробовал в моем файле user.rb:

class User < ActiveRecord::Base

  validates :first_name, :last_name,  :presence => true

  before_update do
    false
  end

end

Вот что я попробовал в консоли rails:

u = User.new(:first_name=>"John", :last_name => "Doe")
=> #<User id: nil, first_name: "John", last_name: "Doe", created_at: nil, updated_at: nil> 

u.update_attributes(:first_name=>nil)
=> false 

u.changed?
=> true 

u
=> #<User id: nil, first_name: nil, last_name: "Doe", created_at: nil, updated_at: nil> 

1 Ответ

6 голосов
/ 05 марта 2011

Только объект Ruby изменился.Проверьте, изменилась ли соответствующая строка базы данных - она ​​не должна иметь.

Проверка Rails не препятствует изменению свойств объекта, а предотвращает их сохранение в базе данных.

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