未定义的方法`is_admin?&#39;对于#<user:0x007fc2b3f952e0>

时间:2017-05-30 17:30:07

标签: ruby-on-rails ruby

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

USER belongs_to 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

role_id存在于用户表

但是当我尝试访问&#39; is_admin?&#39;在rails控制台中的方法,&#34;未定义的方法`is_admin?&#39;为#&#34;出现

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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

我只是创建了另一种方法,现在它已经工作了

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

答案 1 :(得分:0)

您正在使用rolify gem作为角色吗?如果是,那么请遵循以下:

如果要检查is_admin?然后修改你的is_admin?方法为: - &gt;

def is_admin?
   has_role?('admin')
end

然后尝试这个

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

如果用户没有'admin'角色,您可以通过以下方式分配: - &gt;

u.add_role :admin