2016-10-11 7 views
5

Я использовал rails_admin v0.7.0 с успехом в этом вопросе. Я попытался обновить rails_admin до v1.0 сегодня, но получаю неопределенную переменную или ошибку метода для current_user. В v0.7.0 выясняется, что RailsAdmin::MainController наследует от ApplicationController, тогда как в версии 1.0 он наследуется непосредственно от ActionController::Base, что объясняет, что current_user теперь не определено (я считаю, что current_user определяется в ApplicationController с размером зазора). Однако, поскольку я не нахожу кого-либо еще с этой проблемой, я думаю, что я должен что-то упустить.«current_user» undefined в rails_admin с зазором

Я не был тем, кто установил разрешение на это приложение, но я не думаю, что мы делаем что-то нестандартное с этим, что повлияет на это. Clearance::Controller включен в ApplicationController. Нет специального определения current_user.

конфигурации/Инициализаторы/rails_admin.rb

RailsAdmin.config do |config| 

    # Popular gems integration 

    ## Clearance 
    config.authorize_with do |controller| 
    unless current_user.admin? 
     redirect_to(
     main_app.root_path, 
     alert: "You are not permitted to view this page" 
    ) 
    end 
    end 

    config.current_user_method { current_user } 
end 

ответ

8

Вы правы, что Rails Администратор наследует от ::ActionController::Base по умолчанию, и это то, что вызывает проблему. К счастью, исправление прост. Добавить config.parent_controller = "::ApplicationController" в config/initializers/rails_admin.rb:

RailsAdmin.config do |config| 

    ## == Clearance == 
    config.parent_controller = "::ApplicationController" 

    config.authorize_with do |controller| 
    unless current_user && current_user.admin? 
     redirect_to(
     main_app.root_path, 
     alert: "You are not permitted to view this page" 
    ) 
    end 
    end 

    # You actually don't need this line  
    # config.current_user_method { current_user } 
end 

Я создал reference repo here для сравнения, если вам это нужно.

+0

отличный ответ на вопрос «rails_admin». –

+0

Мне это нужно для интеграции с Sorcery в приложении Rails 5, спасибо! –

+0

Я боролся с этой проблемой за * часы *. Благодаря! – daybreaker