2013-06-15 3 views
1

Я работаю над приложением Rails и настроил Devise и работал со всеми настройками по умолчанию, и я настраиваю CanCan.Devise 'user_signed_in?' недоступен из модели CanCan 'Ability'

Ниже приведен контент класса «Способность» (не совсем мой код, основанный на нескольких учебниках);

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user_signed_in? 
     can :manage, :all 
    end 
    end 
end 

Я знаю, что файл сам работает, как я добавил образец authorize! :edit, @document к одному из моих контроллеров. Если я удалю линию if user_signed_in? (и, конечно же, end), тогда, когда присутствует строка can :manage, :all, я могу получить доступ к действиям контроллера document, и без него говорится: «Доступ запрещен».

Однако, когда я пытаюсь сделать это с помощью строки user_signed_in?, я получаю следующее сообщение об ошибке;

NoMethodError в DocumentsController # редактировать

неопределенный метод `user_signed_in? для #

И, что интересно, user_signed_in? прекрасно работает в моих взглядах, где я отображать окно входа в систему или детали, вошедшего в систему пользователя со if ... else блок.

Любые идеи, как я могу получить доступ к user_signed_in? здесь? В долгосрочной перспективе я намерен прочитать значение из записи пользователя, чтобы определить их уровень доступа, но важно, чтобы концепция работала, поскольку переменные будут поступать из одного и того же места!

Спасибо!

ответ

1

Я не уверен, что вы пытаетесь сделать, но вы можете включить Devise::Controllers::Helpers в класс Ability, а затем заменить user_signed_in? на signed_in?(:user).

Смежные вопросы