attr_accessor和类实例调试

时间:2015-10-24 20:28:40

标签: ruby-on-rails attributes

我不明白为什么写作:

class Building < ActiveRecord::Base
    attr_accessor :has_child_custom, 'test'
end

然后我尝试用

调试它
 ap @building

我没有看到&#34; has_child_custom&#34;,但如果我输入:

 ap @building.public_methods.grep(/custom/)

我看到了getter和setter方法。

为什么会发生这种情况以及我在哪里可以看到我的自定义属性?

2 个答案:

答案 0 :(得分:0)

您的代码创建了用于获取和设置名为@has_child_custom的实例变量的访问器方法。在您调用setter方法(或以其他方式创建)之前,该实例变量实际上不存在。

您还在创建访问方法testtest=

答案 1 :(得分:0)

我会非常小心地在ActiveRecord对象中使用getter和setter函数。这些将覆盖ActiveRecord已经为您构建的方法,事情会变得非常混乱。

如果要在ActiveRecord对象中初始化值或设置默认值,最好的办法是使用ActiveRecord callbacks

通常,当我想初始化值时,请为此做一些事情:

def initialize(*args)
  self.attribute_to_initialize = *something here*
end