如何在您的视图中实现简单的作用域,例如:
<% 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" %>
答案 0 :(得分:2)
你根本不能以这种方式使用范围。范围用作类方法,因此如果运行
User.admin
返回匹配给定条件的用户列表。你需要的是一个实例方法。将其添加到您的user.rb文件中:
def admin?
admin == 'admin'
end
您可以在视图中使用它:
- if @user.admin?
无论如何,你绝对应该重新考虑在users
表格中将角色存储为字符串。尝试创建另一个名为roles
的表。
答案 1 :(得分:0)
范围通常是类级方法,如果说,如何使用实例访问它。我想,这就是错误说未定义方法的原因。