Rails 4 - devise_ для неиспользуемых пользовательских контроллеров
Я использую Devise в своем приложении на Rails и хотел бы настроить его поведение. Я прочитал документацию для devise_for
, Но я не могу заставить его использовать мои собственные контроллеры. Мои маршруты выглядят так:
devise_for :users, controllers: {
sessions: "users/sessions",
registrations: "users/registrations"
}
В моем Users::RegistrationsController < Devise::RegistrationsController
Я пробовал следующее:
# POST /resource
def create
puts "I'm here" # never happens!
super
end
Есть идеи о том, что мне не хватает?
Обновить
Обновление 2
Думаю, я мог найти корень проблемы. Я отображаю и представляю свою форму регистрации в модале Bootstrap по другому маршруту, чем путь Devise по умолчанию.
Я представляю форму по этому пути:
/apps/1/edit
И не:
users/sign_up
Если я зарегистрируюсь на этом пути users/sign_up
это работает, и мои методы вызывают. В моем /apps/1/edit
посмотреть я представляю формы как это:
= render "users/registrations/modal_form"
Мое действие редактирования для моего apps_controller
(действие, в котором я представляю форму регистрации) в настоящее время пусто:
# GET /apps/1/edit
def edit
end
Соответствующие части моего users/registrations/modal_form
частично выглядит так:
.modal.fade#registrations_modal{ tabindex: -1, role: 'dialog', "aria-labelledby"
[..]
= render "users/registrations/new_form"
[..]
И мой users/registrations/new_form
выглядит так:
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= devise_error_messages!
.form-group
= f.label :name
= f.text_field :name, autofocus: true, class: "form-control"
.form-group
= f.label :email
= f.email_field :email, class: "form-control"
.form-group
= f.label :password
- if @minimum_password_length
%em
(#{@minimum_password_length} characters minimum)
= f.password_field :password, autocomplete: "off", class: "form-control"
.form-group
= f.submit "Sign up", class: "btn btn-default"
- if current_page?(new_user_registration_path)
= render "devise/shared/links"
Я не очень знаком с Devise. Любые идеи о том, что и где я что-то упустил?
1 ответ
Думаю, я решил это. Вопрос был в моем form_for
где я использовал неправильный маршрут. Вместо использования по умолчанию registration_path
как url
Я вместо этого использую:
user_registration_path(resource_name)
Глупая ошибка. Столкнулся с другой проблемой, я теперь продолжаю получать: ActionController::UnknownFormat
при регистрации. Но теперь он использует мои собственные контроллеры.