2011-05-13 158 views
1

這裏是我的問題:CANCAN未定義的方法`user_type?'對於「管理」:字符串

我使用慘慘的寶石。我認爲一切都很好,除了一件事,產生了undefined method 'user_type?' for "admin":String

這裏是我的ability.rb

class Ability 
    include CanCan::Ability 
    def initialize(user) 
     user ||= User.new # guest user 
     if user.user_type? :admin 
     can :manage, :all 
     # [code code code code commented to find more easily the problem] 
     else 
      can :read, :all 
     end 
    end 
end 

我user.rb

require 'digest/sha2' 

class User < ActiveRecord::Base 
    #definisco i ruoli 
    ROLES = %w[admin client banned] 
    default_scope :order => 'user' [...] 

我想不出我有什麼修改。爲什麼if user.user_type? :admin不檢查當前用戶屬性?非常感謝您的關注!

UP:好吧,我看周圍的康康舞必要方法「CURRENT_USER」在應用控制器聲明。現在我開始工作。新聞,很快。

+2

你上哪兒去定義USER_TYPE?方法 ? – Shreyas 2011-05-13 10:05:17

+0

你在哪裏檢查授權?什麼控制器? (如果它是控制器)請粘貼該代碼。這是因爲不知何故,傳遞給'CanCan'的user變量是一個值爲「admin」的字符串 - 你希望'user'實際上是'User'實例。 – 2011-05-13 10:35:11

+0

解決了! 成ability.rb 如果user.user_type == 「管理員」 在應用控制器我添加 DEF CURRENT_USER @current_user = User.find_by_id(會話[:USER_ID]) 端 謝謝! – 2011-05-13 13:16:09

回答

1

你應該做的像this.I認爲這是更好的辦法。

種子角色到DB中。

而且在應用助手粘貼此代碼。

def is_admin?(user) 
    admin_role = Role.find(:first, :conditions => ["name = ?", "admin"]) 
    return user.roles.include?(admin_role) 
end 

然後在能力調用,比如

  class Ability 
      include CanCan::Ability 
      def initialize(user) 
       user ||= User.new # guest user 
       if is_admin?(user) 
        can :manage, :all 
        # [code code code code commented to find more easily the problem] 
       else 
        can :read, :all 
       end 
      end 
      end 

而且它會正常工作.......

相關問題