如何在ActiveRecord类中初始化变量? 这里的变量是超出数据库范围的变量
如:
class Product
attr_accessor :used
end
我想最初将@used
初始分配给false
,稍后如果有人访问该产品,我会将@used
更改为true
首先我想到将@used=false
放在initialize方法中,但它不会被调用。
答案 0 :(得分:3)
attr_accessor_with_default :used, false
或者如果您想使用初始化方法,您可以定义回调after_initialize
def after_initialize
@used = false
end
将attr_accessor_with_default
与对象文字(例如attr_accessor_with_default :used, false
)一起使用与任何可变对象一起使用是不安全的。具体来说,这意味着您的类的不同实例将具有相同的对象作为其默认值。这有点像尝试使用需要实例变量(@@my_var
)的类变量(@my_var
)。如果要使用可变对象(例如String
,Array
或Hash
),则必须使用块语法:
attr_accessor_with_default(:used) { Array.new }
答案 1 :(得分:1)
定义一个名为:after_initialize
的方法class User < ActiveRecord::Base
def after_initialize
@used = false
end
end
在初始化方法
之后将被称为(ahem)希望这有帮助