首先,我假设User
模型在您的 Rails 应用程序中仍然存在。这意味着,在运行User
rails console
.
如果该表不存在,系统会立即提示您:
=> 用户(表不存在)
现在,让我们玩得开心rails console
:
首先,不要覆盖initialize
Rails 模型中的方法;虽然从 ActiveRecord 创建对象初始化方法优先(我认为),但它可能会产生冲突。而是使用after_initialize
回调。在控制台中:
class User < ActiveRecord::Base
attr_accessible :name, :email
def after_initialize(attributes = {})
self[:name] = attributes[:name]
self[:email] = attributes[:email]
end
def formatted_email
"#{self.name} <#{self.email}>"
end
end
现在,
u = User.new({name: "Foo", email: "foo@bar.org"})
#<User name: "Foo", email: "foo@bar.org", created_at:nil updated_at: nil>
u.formatted_email
#=> "Foo <foo@bar.org>"
全部完成!甜的。
更新:
根据你最近的要点;我认为没有任何意义after_initialize
。Rails 自己做到这一点。
首先,替换attr_accessor
为attr_accessbile
.
attr_accessor
是 ruby 方法(礼貌,元编程),它为提供的实例变量创建 getter 和 setter。Railsattr_accessible
用于此;出于安全考虑,仅attr_accessible
允许批量分配的实例变量(通过发送参数哈希)。
user.rb
class User < ActiveRecord::Base
attr_accessible :name, :email
#def after_initialize(attributes = {})
# self[:name] = attributes[:name]
# self[:email] = attributes[:email]
#end
def formatted_email
"#{self.name} <#{self.email}>"
end
end