Я пытаюсь немного изменить поведение одного метода контроллера. Здесь он говорит, что я могу сделать, что запуск rails генерирует devise: пользователей контроллера.Настройка контроллера разработки
Однако это только что сгенерированный прокомментированный код с кучей супер вызовов. Если я не знаю, что делают супер-методы, как я должен редактировать строки кода, которые я хочу изменить?
Модификация, которую я хочу сделать, проста: если еще нет пользователя-администратора (ни один с role = admin не найден), тогда роль пользователя будет установлена на admin, иначе он будет обычным пользователем. Так я думал, что в этом случае after_filter будет решение, так что я сделал это:
class UserController < Devise::RegistrationsController
after_filter :set_role, only: [:create]
protected
def set_role
admin_user = User.find_by_role(User::admin_role)
if admin_user.nil?
@user.role = User::admin_role
else
@user.role = User::default_role
end
@user.save
end
end
Мои маршруты:
devise_for :users, controllers: { users: "users" }
Однако этот метод даже не выполняется. Зачем? Что я могу сделать?
как вы получите код для 'RegistrationsController :: create'? Потому что, как я уже сказал, при генерации контроллеров с помощью «rails g devise: users users» я получил только комментарии 'super'. Где я могу найти эти методы (думаю, вы скопировали их из источника)? – dabadaba
Кроме того, выполнение того, что вы говорите, возвращает эту ошибку 'uninitialized constant RegistrationsController' – dabadaba
Да, моя была непосредственно из источника (разработка 3.0.3). Вы перезапустили свой сервер? Вы поместили его в каталог контроллеров? Это не подпапка внутри него? – RichardAE