【问题标题】:undefined method `is_admin?' for #<User:0x007fc2b3f952e0>未定义的方法“is_admin?”对于#<用户:0x007fc2b3f952e0>
【发布时间】:2017-05-31 21:58:04
【问题描述】:

我有一个模型用户和角色。

您可以在此模型中看到 USER 属于 ROLE

class User < ApplicationRecord
  belongs_to :role

  # this method return true or false
  def is_admin?
    self.role.name == 'admin'
  end

end


class Role < ApplicationRecord
    has_many :users
end

user表中存在role_id

但是当我尝试访问 'is_admin?' rails 控制台中的方法,“未定义的方法 `is_admin?' for #" 出现

u = User.find_by_email('teste@teste.com')

=> #<User id: 2, email: "teste@teste.com", created_at: "2017-05-30 16:57:57", updated_at: "2017-05-30 17:00:44", role_id: 6>

u.is_admin?

NoMethodError: undefined method `is_admin?' for #<User:0x007fd5233c1ab8

我该怎么做?

【问题讨论】:

  • 做一个reload! 再试一次?
  • @wesley6j 是对的。详细来说,每次在模型中添加方法或更改数据库结构时,都需要在 Rails 控制台中运行 reload! 以查看更改。
  • 没什么变化,同样的错误发生@wesley6j
  • 你的模型不应该是class User &lt; ActiveRecord::Base,是不是打错字了?
  • 或者你标记错了,你在 Rails 5..

标签: ruby-on-rails ruby


【解决方案1】:

我不知道为什么,但是我用这种方式解决了这个问题

我只是创建了另一个方法,现在它可以工作了

  def has_role role
    self.role.name == role
  end

【讨论】:

    【解决方案2】:

    您正在使用 rolify gem 角色?如果是,请按照以下步骤操作:

    如果你想检查 is_admin?然后修改你的 is_admin?方法为:->

    def is_admin?
       has_role?('admin')
    end
    

    那就试试这个

    u = User.find_by_email('teste@teste.com')
    u.is_admin?
    

    如果用户没有“管理员”角色,那么您可以通过 :->

    分配
    u.add_role :admin
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多