2013-08-09 13 views
7

Turbolinks gemを使用しているRuby on Rails 4アプリケーションを開発しています。私は、リンクがクリックされたときに、レイアウトがまだサーバ側にレンダリングされていることに気付きましたが、Turbolinks JavaScriptはこのレンダリングされたコンテンツから身体を取り戻すだけです。私の質問はコントローラ側で、ターボリンク経由でリクエストが行われたかどうかを判断することが可能です。基本的にTurbolinks経由でリクエストが行われた場合、必要のないコードを実行しないようにレイアウトをfalseに設定したいと思います。それはTurbolinksに来るときしかし、何もしていないようです、私はjQueryの経由AJAX要求を行う場合RailsコントローラTurbolinksリクエストを確認する

# Don't use layout when AJAX request 
layout proc { |controller| controller.request.xhr? ? false: "application" } 

このコードは、ヘッダーのレンダリングからAJAX要求を防ぐ:私のApplicationControllerに、私はすでに、次のコードを持っています。

+0

レイアウトなしでレンダリングすると、Turbolinksプロセスが中断されませんか?ターボリンクは「現在のページインスタンスを生かして、本文とタイトルだけを頭に入れます」と言います(引用)。つまり、ターボリンクは送信されるページレイアウト全体に依存しているようです。 – zwippie

答えて

0

これはちょっとしたハックですが、「X-XHR-Referer」のヘッダーをチェックするとそのトリックが行われるようです。

unless request.headers["X-XHR-Referer"].present? 
    do_some_stuff 
end 

Turbolinksがリダイレクト処理のためにヘッダーを追加しているようです。しかしこれは将来変わるかもしれません。

+0

私はこれを達成するために私自身の暗いバージョンのTurbolinksを実装していましたが、ブラウザで戻るボタンを使用すると、ページがボディなしでレンダリングされ、状況がひどくなることがあります。私はすぐに努力する価値がないと判断し、PJAXまたは標準のAJAXを自分のニーズに合わせて使用​​する必要があります。しかし、シェアのためにありがとう。 –

関連する問題