我刚刚将我的应用程序从 Rails 2.3 升级到 3,我得到了一些
我的 before_create 、update、save、destroy 等的弃用警告。
有谁知道如何解决这个问题?
这些是我的警告:
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
您看到的警告是 Rails 3 试图阻止您覆盖基础before_*
and 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)