ActiveRecord:为何自我。而不是@来访问模型中的列值?

时间:2010-12-29 07:25:14

标签: ruby-on-rails

我很困惑为什么无法使用@column_name访问记录的列值。为什么它们不是实例变量? activerecord如何保持其价值?为什么有必要在列名称前加上“self”。作业?

感谢您为我澄清这个谜!

1 个答案:

答案 0 :(得分:2)

因为如果你错误地输入@ f00,那么当你的意思是@foo或@Foo时,弄清楚为什么你的代码不起作用会很痛苦。这样就会在拼写错误上出现“无方法错误”,而不是制作一个你不想要的新变量

修改

我误解了这个问题。当他们这样做时,我认为你的意思是在ActiveRecord源内。真正的原因是因为ActiveRecord几乎完全是通过反射实现的。它检查数据库中的column_names,然后通过method_missing动态地为这些字段创建setter和getter。如果我在使用self.field后回想正确,它会设置@field。这可能隐藏在@attributes [:field]中。