Rails 4 - 设计:在注册时获取ActionController :: UnknownFormat

And*_*ers 6 ruby ruby-on-rails devise ruby-on-rails-4

我有一个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)
Run Code Online (Sandbox Code Playgroud)

我不是如何解决它.

我使用自定义控制器sessionsregistrations.我的路线目前看起来像这样:

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

get 'users/show', to: "users#show"
get 'users', to: "users#index"
Run Code Online (Sandbox Code Playgroud)

我的新用户表单看起来像这样 - 这是在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" 
Run Code Online (Sandbox Code Playgroud)

应用程序在我的Users::RegistrationsController < Devise::RegistrationsController create方法中崩溃:

# POST /resource
def create
  # byebug
  super
end
Run Code Online (Sandbox Code Playgroud)

浏览器中的URL如下(看起来很可疑!):

http://localhost:3000/users.user
Run Code Online (Sandbox Code Playgroud)

我试过添加:

respond_to :json, :html
Run Code Online (Sandbox Code Playgroud)

在我的顶部Users::RegistrationsController < Devise::RegistrationsController,但没有帮助.

注意

运行gem后bye bug,应用程序似乎在此方法中崩溃:

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

session[:previous_url] 回报 "/apps/1/edit"

关于我在这里或其他地方做错的任何想法?

旁注 我同时正在努力解决另一个设计问题(它们可能是相关的).我在这里有另一个问题:Rails 4 - 设计,访客用户导致过滤器链停止

Yur*_*dev 16

只需在表单中更改:

= form_for(resource, as: resource_name, url: user_registration_path) do |f|
Run Code Online (Sandbox Code Playgroud)

user_registration_path不需要额外的参数,并传递resource_name给它,这与user您的情况相同.它被解释为格式,因此你得到url http://localhost:3000/users.user(user在这种情况下设置为格式).