如何在 View 中实现简单的范围界定,例如:
<% if @user.admin %>
其中“admin”是 user.rb 中的以下范围:
scope :admin, where(role: "admin")
用户表中有一个角色列,它是一个字符串
我之前对另一个模型(但不是设计用户模型)做过同样的事情,稍后我可以调用它
<% if objective.completed %>
在目标中调用每个方法之后。
但是 当我对用户模型做完全相同的事情时,我得到一个
undefined method `admin' for #<User:0x00000107e39038>
我怎样才能让它发挥作用?我已经挖了好几个小时了。
对于无范围解决方法,请尝试:
<% if @user.role == "admin" %>
最佳答案
您根本无法以这种方式使用作用域。作用域用作类方法,因此如果您运行
User.admin
它返回匹配给定条件的用户列表。您需要的是一个实例方法。将其添加到您的 user.rb 文件中:
def admin?
admin == 'admin'
end
您将能够在您的 View 中使用它:
- if @user.admin?
无论如何,您绝对应该重新考虑将角色存储为 users
表中的字符串。尝试创建另一个名为 roles
的表。
关于ruby-on-rails-3 - 如何在 Rails 中正确确定用户属性的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873357/