2

如何在您的视图中实现简单的范围界定,例如:

<% if @user.admin %>

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

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

有一个列 Role 是用户表中的一个字符串

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

<% if objective.completed %>

在目标中调用 each 方法之后。

但是 ,当我对用户模型执行完全相同的操作时,我会得到一个

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

我怎样才能让它工作?我已经挖了好几个小时了。

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

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

2 回答 2

2

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

User.admin

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

def admin?
  admin == 'admin'
end

您将能够在您的视图中使用它:

- if @user.admin?

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

于 2013-09-18T13:27:41.890 回答
0

范围通常是类级别的方法,话虽如此,您如何使用实例访问它。我认为,这就是错误说未定义方法的原因。

于 2013-09-18T13:26:22.450 回答