我刚刚在我的模型上设置了一个新的布尔accepted
属性,看起来像这样:
class Invitation < ActiveRecord::Base
attr_protected :accepted
...
end
我希望它是一个私有属性,但是当我试图像这样删除公共setter时:
class Invitation < ActiveRecord::Base
attr_protected :accepted
private :accepted=
...
end
我立即得到一个类型为:
的失败。invitation.rb:17:in `private': undefined method `accepted=' for class `Invitation' (NameError)
为什么AR不检测setter?我知道我可以通过定义方法来做到这一点,但是我很感兴趣的是为什么我不能使用简写的private :accepted=
路由。
属性getter和setter不是实际的方法,它们是在ActiveRecord中使用method_missing
实现的。这就是为什么你不能使用private
来操作它们。