Я работаю над простым веб-приложением, которое имеет модель пользователя и ролевую модель (среди прочего), а также раздел администратора, содержащий множество контроллеров. Я хотел бы использовать before_filter, чтобы проверить, что пользователь пользователя в сеансе имеет флаг can_access_admin.
у меня есть этот код в application.rb:
def check_role @user = сеанс [: пользователь]
если @ user.role.can_access_admin.nil? || [email protected]_access_admin render: text => "ваша текущая роль не разрешает доступ к области администрирования." возвращаться конец конец
а затем у меня есть этот код внутри одного из контроллеров администратора:
класс Admin :: BlogsController <ApplicationController before_filter: check_role
список def @blogList = Blog.find (: все) конец конец
и когда я пытаюсь просмотреть действие списка, я получаю эту ошибку:
неопределенный метод 'role' для пользователя ...
кто-нибудь знает, что мне нужно сделать, чтобы ассоциация ролей была распознана в application.rb? (обратите внимание, что ассоциации настроены правильно, и @ user.role работает нормально везде, где я пытался его использовать)





просто предположение, но похоже, что ваша сессия [: user] просто хранит идентификатор, вам нужно сделать:
@user = User.find(session[:user])
или что-то в этом роде, чтобы получить пользователя из базы данных (вместе с его ассоциациями).
Это хорошо сделать и в предварительном фильтре.
Удерживает ли сеанс [: user] пользователя? или user_id? Перед вызовом .role вам может потребоваться поиск.
Кроме того, если вы используете ActsAsAuthenticated или RestfulAuthentication или их собратья, вы также можете использовать метод current_user, который они предоставляют.