初始化ActiveRecord类中的变量

时间:2010-06-03 07:38:38

标签: ruby-on-rails ruby activerecord

如何在ActiveRecord类中初始化变量? 这里的变量是超出数据库范围的变量

如:

class Product
  attr_accessor :used
end

我想最初将@used初始分配给false,稍后如果有人访问该产品,我会将@used更改为true

首先我想到将@used=false放在initialize方法中,但它不会被调用。

2 个答案:

答案 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)。如果要使用可变对象(例如StringArrayHash),则必须使用块语法:

attr_accessor_with_default(:used) { Array.new }

答案 1 :(得分:1)

定义一个名为:after_initialize

的方法
class User < ActiveRecord::Base
  def after_initialize
    @used = false
  end
end

在初始化方法

之后将被称为(ahem)

希望这有帮助