在Rails 4中为#<user:0x00000109c39880>滚动未定义的方法`add_role'</user:0x00000109c39880>

时间:2014-09-08 14:25:41

标签: ruby-on-rails rolify

只是尝试安装Rolify来创建一个管理员角色,该角色有权编辑一些具体的属性......

我一步一步地遵循它的文档,一切看起来很好,除非我尝试向用户添加角色,它会说

undefined method add_role for <User:0x00000109c39880>

在我的用户模型中,我有rolify方法应该提供add_role方法......

2重要注意事项:

我正在使用friendly_id 我正在使用设计宝石

任何人都可以提供帮助吗?

用户模型

class User < ActiveRecord::Base
  rolify
  attr_accessor :tos_agreement
  is_impressionable :counter_cache => true, :column_name => :impressions_counter, :unique => :request_hash
  has_many :photos
  has_many :tags, through: :photos
  has_many :comments, through: :photos
  validates :tos_agreement, acceptance: true
  extend FriendlyId
  friendly_id :name, use: :slugged

  mount_uploader :avatar, AvatarUploader
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :omniauthable,
         :recoverable, :rememberable, :trackable, :validatable

  def update_with_password(params={}) 
    if params[:password].blank? 
      params.delete(:password) 
      params.delete(:password_confirmation) if params[:password_confirmation].blank? 
    end 
    update_attributes(params) 
  end

  # Omniauth Devise
  def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    user = User.where(:provider => auth.provider, :uid => auth.uid).first
    @user = user
    if user
      return user
    else
      registered_user = User.where(:email => auth.info.email).first
      if registered_user
        return registered_user
      else
        user = User.create(name:auth.extra.raw_info.name,
          provider:auth.provider,
          uid:auth.uid,
          email:auth.info.email,
          password:Devise.friendly_token[0,20],
          )
        # if user.save
        #   UserMailer.welcome_email(@user).deliver
        # end
      end

    end
  end

end

Role.rb

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true

  scopify
end

由于

1 个答案:

答案 0 :(得分:3)

重启服务器:)

根据我的个人经验,每当我遇到一个应该存在且不存在的方法时,我怀疑没有调用负责定义方法的方法。我希望rolify能够生成一些异常,而不是静默失败。

Rails开发服务器只会自动重新加载你的类(config.autoload_paths中指定的类),来自gems的库需要重启服务器。现有tools可自动重新加载宝石。