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::RegistrationsController
create
метод:
# 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
устанавливается в качестве формата в этом случае).