ПРЕДУПРЕЖДЕНИЕ ОБ УСТРОЙСТВЕ в Rails3 для before_create, before_update, before_save, before_destroy - PullRequest
26 голосов
/ 22 сентября 2010

Я только что обновил свое приложение с Rails 2.3 до 3 и получаю некоторые ПРЕДУПРЕЖДЕНИЯ ОБ УСТАРЕВАНИИ для моего before_create, обновления, сохранения, уничтожения и т.д.

Кто-нибудь знает, как не решить проблему?

Вот мои предупреждения:

DEPRECATION WARNING: Base#before_create has been deprecated, please use Base.before_create :method instead. (called from /Users/macmini/qna/app/models/user.rb:32)
DEPRECATION WARNING: Base#before_update has been deprecated, please use Base.before_update :method instead. (called from /Users/macmini/qna/app/models/user.rb:40)
DEPRECATION WARNING: Base#after_save has been deprecated, please use Base.after_save :method instead. (called from /Users/macmini/qna/app/models/user.rb:50)
DEPRECATION WARNING: Base#before_destroy has been deprecated, please use Base.before_destroy :method instead. (called from /Users/macmini/qna/app/models/user.rb:56)

Только один пример для before_create:

  def before_create
    self.username.downcase!
    self.salt = User.make_salt(self.username)
    self.hashed_password = User.hash_with_salt(@password, self.salt)
  end

1 Ответ

63 голосов
/ 22 сентября 2010

Предупреждение, которое вы видите, является попыткой Rails 3 отговорить вас от перезаписи базовых before_* и after_* методов.Это похоже на то, как у вас будет before_filter и другие обратные вызовы в вашем контроллере.

Это означает, что вместо того, чтобы делать:

def before_create
  self.username.downcase!
  self.salt = User.make_salt(self.username)
  self.hashed_password = User.hash_with_salt(@password, self.salt)
end

Rails хочет, чтобы вы делали:

before_create :downcase_username_and_create_password

def downcase_username_and_create_password
  self.username.downcase!
  self.salt = User.make_salt(self.username)
  self.hashed_password = User.hash_with_salt(@password, self.salt)
end

В этом случае вы можете даже разделить их на две части, так как может существовать вероятность того, что вы захотите сгенерировать пароль независимо:

before_create :downcase_username, :create_password

def downcase_username
  self.username.downcase!
end

def create_password
  self.salt = User.make_salt(self.username)
  self.hashed_password = User.hash_with_salt(@password, self.salt)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...