7

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

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

respond_with resource, :location => after_update_path_for(resource)

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

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

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

4

2 回答 2

12

只需向 RegistrationsController 添加一行,以便 Devise 知道同时响应 html 和 js。

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

阅读 respond_with 的真正帮助。几个很好的链接:

Rails API 响应程序

AsciiCast

于 2013-05-02T22:53:47.383 回答
3

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

配置/初始化程序/设计

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

配置/路由.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');
于 2015-07-30T00:17:09.943 回答