Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在rails中正确定义用户属性的范围_Ruby On Rails 3_Devise_Scope_Scoping - Fatal编程技术网

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?