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之外工作。