Rails 4 - разработка: получение ActionController::UnknownFormat при регистрации

У меня есть приложение Rails 4.2.3, где я использую Devise для аутентификации пользователей. Я представляю свою регистрационную форму в модале Bootstrap. Я реализовал его так: https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app. При регистрации я получаю эту ошибку:

Completed 406 Not Acceptable in 512033ms (ActiveRecord: 5.8ms)
ActionController::UnknownFormat (ActionController::UnknownFormat)

И я не знаю, как это исправить.

Я использую пользовательские контроллеры для sessions а также registrations, Мои маршруты в настоящее время выглядят так:

devise_for :users, :controllers => {sessions: "users/sessions", registrations: "users/registrations"}

get 'users/show', to: "users#show"
get 'users', to: "users#index"

Моя новая пользовательская форма выглядит следующим образом - она ​​отображается в частичном виде, представленном в модале Bootstrap:

= form_for(resource, as: resource_name, url:  user_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" 

Приложение вылетает в моем Users::RegistrationsController < Devise::RegistrationsControllercreate метод:

# POST /resource
def create
  # byebug
  super
end

И URL в браузере выглядит следующим образом (выглядит подозрительно!):

http://localhost:3000/users.user

Я попытался добавить:

respond_to :json, :html

На вершине моего Users::RegistrationsController < Devise::RegistrationsController, но это не помогло.

Заметка

После запуска драгоценного камня bye bug приложение, кажется, падает в этом методе:

# The path used after sign up.
def after_sign_up_path_for(resource)
  byebug
  session[:previous_url] || root_path # crashes here
end

session[:previous_url] возвращается "/apps/1/edit"

Есть идеи о том, что я делаю не так здесь или где-то еще?

Sidenote Я одновременно борюсь с другой проблемой устройства (они могут быть связаны). У меня есть еще один вопрос для этого здесь: Rails 4 - разработка, гостевые пользователи вызывают остановку цепочки фильтров

1 ответ

Решение

Просто измените это в вашей форме:

= form_for(resource, as: resource_name, url: user_registration_path) do |f|

user_registration_path не требует дополнительного параметра, и вы передаете resource_name к нему, который равен user в твоем случае. Это интерпретируется как формат, и, следовательно, вы получите URL как http://localhost:3000/users.user (user устанавливается в качестве формата в этом случае).

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