CANCAN неопределенный метод `user_type? 'для "админ": строка - PullRequest
1 голос
/ 13 мая 2011

вот моя проблема:

Я использую cancan gem.Я думаю, что все настроено хорошо, за исключением одной вещи, которая производит undefined method 'user_type?' for "admin":String.

Вот моя способность. 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

Мой пользователь

Я не могу понять, что мне нужно изменить.Почему if user.user_type? :admin не проверяет текущий атрибут пользователя?Большое спасибо за ваше внимание!

UP: Хорошо, я прочитал о том, что cancan нужен метод "current_user", объявленный в контроллере приложения.Сейчас я работаю над этим.Новости скоро.

1 Ответ

1 голос
/ 26 марта 2012

Вы должны сделать это следующим образом. Я думаю, что лучше подходить.

Поместить роли в БД.

А в помощнике приложения вставить этот код.

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

И все будет работать нормально .......

...