在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');