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 при регистрации. Но теперь он использует мои собственные контроллеры.

Другие вопросы по тегам