0

プロジェクトにpjax-railsgemを使用しようとしています。

gemからredirectメソッドを使用する場合。ブラウザは応答をテキストとしてレンダリングします。script/javascriptの代わりにtext/javascriptを想定しています。

これが私のコントローラーの外観です(redirect_to_pjaxに注意してください):

 def create
@contact = Contact.new params[:contact]
if @contact.save
    flash[:notice] = "Successfully added contact"
    redirect_pjax_to :show,@contact
end

これは宝石ですhttps://github.com/rails/pjax_rails

これは、メソッド「redirect_pjax_to」の元の実装です。魔法はここで発生すると思います...(githubから取得)

 private  
def redirect_pjax_to(action, url = nil)
  new_url = url_for(url ? url : { action: action })

  render js: <<-EJS
    if (!window.history || !window.history.pushState) {
      window.location.href = '#{new_url}';
    } else {
      $('[data-pjax-container]').html(#{render_to_string("#{action}.html.erb", layout: false).to_json});
      $(document).trigger('end.pjax');

      var title = $.trim($('[data-pjax-container]').find('title').remove().text());
      if (title) document.title = title;
      window.history.pushState({}, document.title, '#{new_url}');
    }
  EJS
end

ここでrender:jsにはcontent_typeが必要だと思います...

誰かが同じ問題を抱えていますか?またはより良い解決策はありますか?

4

1 に答える 1

0

AJAX 呼び出しを行ったかどうかを確認できますか? アンカー要素ではなくinput要素から作成すると、pjaxが起動しないと思います

PJAX の HTTP 要求のヘッダーをチェックするだけで、Rails アプリケーションで PJAX を使用し、render :layout false を実行します。魅力のように機能します。

于 2011-10-04T15:46:30.160 に答える