在Rails中通过JS设计注册#update

我正在尝试使用AJAX通过Devise更新用户模型,并让Devise使用正确的javascript文件进行响应。

我想将表单远程提交到注册#update action,但这不适用于Devise的默认响应,它使用RegistrationsController中的以下内容:

respond_with resource, :location => after_update_path_for(resource) 

上面尝试重定向到默认路由,而不是呈现update.js.erb文件。 我可以覆盖该操作并使其与以下更改一起使用:

 respond_to do |format| format.html format.js end 

但是,这似乎非常暴力,因为我压倒整个行动。 是否有一种简单的方法让Devise知道用javascript响应而不是默认重定向?

只需在RegistrationsController中添加一行,以便Devise知道响应html和js。

 class RegistrationsController < Devise::RegistrationsController respond_to :html, :js end 

阅读response_with如何真正有所帮助。 几个好的链接:

Rails API响应程序

AsciiCast

我最近通过进行以下调整来解决这个问题,除了添加remote: true到表单:

config / initializers / devise

 # If http headers should be returned for AJAX requests. True by default. config.http_authenticatable_on_xhr = false 

config / routes.rb

 devise_for :users, controllers: { registrations: 'users/registrations' } 

controllers / users / registrations_controller.rb

 class Users::RegistrationsController < Devise::RegistrationsController respond_to :html, :js end 

views / users / registrations / create.js.erb

 alert('success'); 

views / users / registrations / new.js.erb

 alert('invalid');