ruby-on-rails-3 - 如何在 Rails 中正确确定用户属性的范围

标签 ruby-on-rails-3 devise scope scoping

如何在 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/

相关文章:

javascript - for 循环的第一个语句中声明的变量是否有作用域或经过特殊处理?

ruby-on-rails - 如何从 Rails 中的 URL 获取查询字符串

ruby-on-rails - 当现有用户尝试注册时登录 - 设备

angularjs - 为什么模型不会在这个递归 Angular 指令中更新?

ruby-on-rails - 设计身份验证 - 密码恢复后无需确认

ruby-on-rails - Rails 试图访问模型中的参数

javascript - 为什么我不能在闭包中访问局部变量

ruby-on-rails - Rails 什么是抓取网站的最佳 gem?

ruby-on-rails - Rails/Mailer - 发送电子邮件后出现 NoMethodError

ruby-on-rails-3 - RoR - 通过关联和迁移或 "by hand"(或脚手架)创建的外键?