如何在rails中正确定位用户属性

时间:2013-09-18 13:19:17

标签: ruby-on-rails-3 devise scope scoping

如何在您的视图中实现简单的作用域,例如:

<% if @user.admin %>

其中“admin”是user.rb中的以下范围:

scope :admin, where(role: "admin")

有一个列Role,它是Users表中的一个字符串

我之前用另一个Model(但不是设计用户模型)做了同样的事情,我以后可以调用它

<% if objective.completed %>

在调用目标中的每个方法后立即。

然而 当我对用户模型执行完全相同的操作时,我得到了

undefined method `admin' for #<User:0x00000107e39038>

我怎么能让它起作用?我一直在挖掘几个小时。

对于无范围的解决方法,请尝试:

<% if @user.role == "admin" %>

2 个答案:

答案 0 :(得分:2)

你根本不能以这种方式使用范围。范围用作类方法,因此如果运行

User.admin

返回匹配给定条件的用户列表。你需要的是一个实例方法。将其添加到您的user.rb文件中:

def admin?
  admin == 'admin'
end

您可以在视图中使用它:

- if @user.admin?

无论如何,你绝对应该重新考虑在users表格中将角色存储为字符串。尝试创建另一个名为roles的表。

答案 1 :(得分:0)

范围通常是类级方法,如果说,如何使用实例访问它。我想,这就是错误说未定义方法的原因。