0

Rack-cors gem を使用して、Rails 4 アプリに CORS を実装しました。Chrome と Firefox では問題なく動作しますが、レイアウトがレンダリングされるのを防ぐことはできません。

私の行動の終わりに、私は次のものを持っています:

respond_to do |format|
  format.html { layout false if request.xhr? }
end

format.js または format.json を format.html の前に配置すると、機能しなくなります。request.xhr? false を返します。これは、cors がリクエストをリダイレクトし、xhr リクエストとして表示されなくなったためだと思いますか?

これを行うために考えられる唯一の方法は、アクションを別の名前または別のコントローラーにコピーして、レイアウトを完全に無効にすることですが、それはハックすぎるようです。

何か案は?

4

2 に答える 2

0

これを解決するには、rack_cors gem をインストールし、cors リクエスト専用の Ajax という名前の新しいコントローラーを作成しました。アクションは別のコントローラーの通常の html アクションと同じだったので、コードをモジュールに移動して、両方のコントローラーが共有できるようにしました。コントローラー間の唯一の違いは、私が設定したことです

layout false

新しいコントローラーの上部にあります。これが私の完全なコントローラーです。

class AjaxController < ApplicationController

include CalcResults

skip_before_filter :authorize

layout false

def ajax_results

  calc_results

  respond_to do |format|

    format.html 

  end
 end
end

私のconfig/application.rbファイルでは:

config.middleware.use Rack::Cors do
  allow do
    origins '*'
    resource '/ajax_results/*', :headers => :any, :methods => [:get, :options]
  end
end
于 2013-10-05T13:52:46.957 に答える
0

これを試してください:-

format.html { :layout => false if request.xhr? }
于 2013-10-05T02:57:58.453 に答える