我正在尝试使用AJAX通过Devise更新用户模型,并让Devise使用正确的javascript文件进行响应。
我想将表单远程提交到注册#update操作,但这不适用于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响应而不是做默认的重定向?
答案 0 :(得分:12)
只需向RegistrationsController添加一行,以便Devise知道对html和js都做出响应。
class RegistrationsController < Devise::RegistrationsController
respond_to :html, :js
end
了解respond_with如何真正起作用。几个良好的链接:
答案 1 :(得分:2)
除了在表单中添加remote: true
之外,我最近通过进行以下调整来解决这个问题:
<强>配置/初始化/色器件强>:
# If http headers should be returned for AJAX requests. True by default.
config.http_authenticatable_on_xhr = false
<强>配置/ routes.rb中强>:
devise_for :users, controllers: { registrations: 'users/registrations' }
<强>控制器/用户/ registrations_controller.rb 强>:
class Users::RegistrationsController < Devise::RegistrationsController
respond_to :html, :js
end
<强>视图/用户/注册/ create.js.erb 强>:
alert('success');
<强>视图/用户/注册/ new.js.erb 强>:
alert('invalid');