为什么AR不允许我使用`private:accepted =`创建属性setter private?

时间:2011-08-02 10:31:24

标签: ruby-on-rails activerecord

我刚刚在我的模型上设置了一个新的布尔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=路线。

1 个答案:

答案 0 :(得分:0)

属性getter和setter不是实际方法,它们是使用ActiveRecord中的method_missing实现的。这就是为什么你不能使用private来操纵它们。