7

AJAXを使用してDeviseを介してユーザーモデルを更新し、適切なjavascriptファイルでDeviseに応答させようとしています。

フォームをリモートで registrations#update アクションに送信したいのですが、これは、RegistrationsController から以下を使用する Devise からのデフォルトの応答では機能しません。

respond_with resource, :location => after_update_path_for(resource)

上記は、update.js.erb ファイルをレンダリングする代わりに、デフォルト ルートにリダイレクトしようとします。アクションを上書きして、次の変更で動作させることができます。

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

しかし、私はアクション全体をオーバーライドしているので、これは非常に力ずくのようです。デフォルトのリダイレクトを行う代わりに、JavaScriptで応答することをDeviseが知る簡単な方法はありますか?

4

2 に答える 2

12

Deviseがhtmlとjsの両方にrespond_toすることを認識できるように、RegistrationsControllerに行を追加するだけでした。

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

Respond_with が実際にどのように役立ったかを読んでください。いくつかの良いリンク:

Rails API レスポンダー

アスキーキャスト

于 2013-05-02T22:53:47.383 に答える
3

私は最近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' }

コントローラー/ユーザー/登録_コントローラー.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 に答える