如何在视图中实现简单的范围界定,例如:
<% 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
的表。
作用域通常是类级方法,话虽如此,如何使用实例访问它。我认为,这就是为什么错误说未定义的方法。