为什么 AR 不允许我使用"private :accept="将属性设置器设为私有?



我刚刚在我的模型上设置了一个新的布尔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来操作它们。

最新更新