Ruby on rails 3 如何在rails中正确定义用户属性的范围
如何在视图中实现简单的范围界定,例如:Ruby on rails 3 如何在rails中正确定义用户属性的范围,ruby-on-rails-3,devise,scope,scoping,Ruby On Rails 3,Devise,Scope,Scoping,如何在视图中实现简单的范围界定,例如: <% if @user.admin %> 用户表中有一个字符串列角色 我以前用另一个模型(但不是Desive用户模型)做过同样的事情,我以后可以调用它 <% if objective.completed %> 在调用目标中的每个方法之后 但是 当我对一个用户模型做同样的事情时,我得到一个 undefined method `admin' for #<User:0x00000107e39038> 的未定义方法“a
<% if @user.admin %>
用户表中有一个字符串列角色
我以前用另一个模型(但不是Desive用户模型)做过同样的事情,我以后可以调用它
<% if objective.completed %>
在调用目标中的每个方法之后
但是
当我对一个用户模型做同样的事情时,我得到一个
undefined method `admin' for #<User:0x00000107e39038>
的未定义方法“admin”#
我怎样才能让它工作?我已经挖了好几个小时了
要获得无作用域解决方案,请尝试:
<% if @user.role == "admin" %>
作用域通常是类级方法,您如何使用实例访问它呢。我认为,这就是为什么错误显示为未定义的方法。您不能这样使用作用域。作用域用作类方法,因此如果运行
User.admin
它返回符合给定条件的用户列表。您需要的是一个实例方法。将其添加到user.rb文件:
def admin?
admin == 'admin'
end
您将能够在您的视图中使用它:
- if @user.admin?
无论如何,您肯定应该重新考虑将角色存储为
users
表中的字符串。尝试创建另一个名为角色
的表,感谢您的见解!对于可能遇到此问题的其他人,最简单的解决方法是:
- if @user.admin?