我不明白为什么写作:
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方法。
为什么会发生这种情况以及我在哪里可以看到我的自定义属性?
答案 0 :(得分:0)
您的代码创建了用于获取和设置名为@has_child_custom
的实例变量的访问器方法。在您调用setter方法(或以其他方式创建)之前,该实例变量实际上不存在。
您还在创建访问方法test
和test=
答案 1 :(得分:0)
我会非常小心地在ActiveRecord对象中使用getter和setter函数。这些将覆盖ActiveRecord已经为您构建的方法,事情会变得非常混乱。
如果要在ActiveRecord对象中初始化值或设置默认值,最好的办法是使用ActiveRecord callbacks。
通常,当我想初始化值时,请为此做一些事情:
def initialize(*args)
self.attribute_to_initialize = *something here*
end