Ruby attr_访问器在Rails中破坏了我的两个方法

Ruby attr_访问器在Rails中破坏了我的两个方法,ruby,ruby-on-rails-3,attr-accessor,Ruby,Ruby On Rails 3,Attr Accessor,我有一个用户模型。它的一个属性是一个名为:access的字符串,它可以是nil、“admin”或“active” 现在在用户模型中,我有以下方法: def admin? self.access == "admin" end def active? self.access == "active" end 他们工作得很好。但是,如果我向模型中添加attr\u accessor:access,就会出现一些问题。我的admin?和active?方法不再有效。当我进入rails控制台并从数据库

我有一个用户模型。它的一个属性是一个名为
:access
的字符串,它可以是nil、“admin”或“active”

现在在用户模型中,我有以下方法:

def admin?
  self.access == "admin"
end

def active?
  self.access == "active"
end

他们工作得很好。但是,如果我向模型中添加
attr\u accessor:access
,就会出现一些问题。我的
admin?
active?
方法不再有效。当我进入rails控制台并从数据库中取出一个用户时,我可以看到
User=User.find(7)
显示
access
设置为“admin”。但如果我键入
user.access
,它将返回
nil
user.admin?
返回
false
attr\u访问器
正在覆盖从数据库读取和写入属性的默认方法。如果它已经是db中的一列,并且
Rails
为您提供了读写方法,那么为什么需要
attr\u访问器
。您是否将其与
attr\u accessible
混淆?

access是否已经是数据库中的一列?您能否更具体地回答:什么中断?您是否得到了一个特定的错误,等等。另外,您在用户模型中是否已经有了访问attr_的权限?最初的问题是rspec给了我一个错误,access=丢失了。所以我想我需要为:acesss添加一个访问器。但当我这么做的时候,我的管理员?和活跃?方法开始返回nil,原因是rspec给我一个错误,告诉我access=未定义。所以我想我需要一个访问器。这似乎是Rspec问题,您可以删除
attr\u访问器
,然后在控制台中尝试
access=
,看看它是否在Rspec之外工作。