如何在轨道中正确限定用户属性的范围



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

<% if @user.admin %>

其中"admin"是 User.rb 中的以下范围:

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

有一列 角色 是"用户"表中的字符串

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

<% if objective.completed %>

在目标中调用 EACH 方法后立即。

然而当我对用户模型做完全相同的事情时,我得到一个

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

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

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

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

您根本无法以这种方式使用作用域。作用域用作类方法,因此,如果您运行

User.admin

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

def admin?
  admin == 'admin'
end

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

- if @user.admin?

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

作用域通常是类级方法,话虽如此,如何使用实例访问它。我认为,这就是为什么错误说未定义的方法。

相关内容

  • 没有找到相关文章

最新更新