Обратный вызов на ошибку Application Controller — NameError (неопределенная локальная переменная или метод

Я обновляю приложение с Rails 2 до 3. Я использую подход с правами и ролями для аутентификации, который отлично работает в Rails 2. В моем контроллере приложений (application.rb) у меня есть:

класс ApplicationController ‹ ActionController::Base

def check_authentication
    unless session[:user]
            session[:intended_resource] = request.request_uri
            session[:intended_action] = action_name
            session[:intended_controller] = controller_name
            redirect_to :controller => "sessions", :action => "new"
            return false
     end
 end

 def check_authorization
   user = User.find(session[:user])
   unless user.roles.detect{|role|
     role.rights.detect{|right|
       right.action == action_name && right.controller == self.class.controller_path
       }
     }
     flash[:notice] = "You are not authorized to view the page you requested"
     request.env["HTTP_REFERER"] ? (redirect_to :back) : (redirect_to :controller => "sessions", :action => "new")
     return false
   end
 end

конец

В других моих контроллерах я включил предварительный фильтр.

   before_filter :check_authentication,:check_authorization

Я получаю следующее сообщение об ошибке, например, когда я перехожу к контроллеру панели мониторинга.

  NameError (undefined local variable or method `check_authentication' for DashboardController:0x0000010291a0c0):

Есть ли что-то еще, что мне нужно изменить или добавить, чтобы это работало в Rails 3?

Спасибо, Аарон


person Aaron    schedule 02.12.2010    source источник
comment
Анукул, я проверил, все в порядке.   -  person Aaron    schedule 02.12.2010


Ответы (2)


Убедитесь, что ваш DashboardController наследуется от ApplicationController, то есть DashboardController < ApplicationController.

person Anukul Veeraraghavan    schedule 02.12.2010

Проблема решена. Каким-то образом во время моего обновления у меня были файлы с именами application.rb и application_controller.rb в папке моих контроллеров. Оба были определены как ApplicationController ‹ ActionController::Base. Код моего «настоящего» Application Controller находился в application.rb, а не в application_controller.rb, который был пуст. Простое копирование и вставка, и все было в порядке. Я не знаю, как это произошло. Запуск плагина rails_upgrade прошел не так гладко, как планировалось.

person Aaron    schedule 02.12.2010