我很困惑为什么无法使用@column_name访问记录的列值。为什么它们不是实例变量? activerecord如何保持其价值?为什么有必要在列名称前加上“self”。作业?
感谢您为我澄清这个谜!
答案 0 :(得分:2)
因为如果你错误地输入@ f00,那么当你的意思是@foo或@Foo时,弄清楚为什么你的代码不起作用会很痛苦。这样就会在拼写错误上出现“无方法错误”,而不是制作一个你不想要的新变量
我误解了这个问题。当他们这样做时,我认为你的意思是在ActiveRecord源内。真正的原因是因为ActiveRecord几乎完全是通过反射实现的。它检查数据库中的column_names,然后通过method_missing动态地为这些字段创建setter和getter。如果我在使用self.field后回想正确,它会设置@field。这可能隐藏在@attributes [:field]中。