2012-07-02 4 views
12

このタイプの機械の解決策を探しています。通常はすべてのページをRailsにロードしたいのですが、Ajaxリクエストを行うたびにレイアウトのないページを返すだけです。したがって、いつでも私はAJAXを作成するときに、?page=trueかその行に何かを追加し、Railsにレイアウトなしでページを返すことができます。AJAXリクエスト中にレイアウトがレイアウトされないようにするレール

これは可能ですか?私が行方不明になっているより良い方法がありますか?

ありがとうございました!

最終解決ワーキングコード:コントローラで

あなたはrespond_toブロックにformat.htmlに少しロジックを追加するだけです。例えばshow方法

def show 
    # code beforehand 

    respond_to do |format| 
     format.html { render :layout => !request.xhr? } 
     # other formats 
    end 
end 

そして、それはそれです! AJAXリクエスト中のレイアウトを防ぐ!

注:彼の答えに対するスマシーのコメントのおかげで、これはさらに単純化されました。私はもともとformat.html { render :layout => nil if request.xhr? }でした。このソリューションはまったく同じように機能しますが、スマシーの修正によってさらに簡単になります。

+0

すべてのAjaxリクエストに対してアプリケーションコントローラで同じことを実行できますか? –

+0

可能な複製[xhrsに応答してレイアウトをレンダリングしない](http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

答えて

8

このパラメータを追加する必要はありません。request.xhr?は、コントローラがAjaxリクエストのときにtrueを返します。それを使ってレイアウトをレンダリングするかどうかを決定するだけです。

+0

どうしたらうまくいくのですか?私は 'request.xhrなら'試しましたか? render:layout => nil end'を表示します。エラーを返します。 request.xhrを使用していませんか?正しくまたはレイアウトを間違って削除しようとしています。 – KayoticSully

+1

私はそれを理解することができました、情報のためにあなたを感謝します。私は実際の最終作業コードで質問を編集します。あなたの情報のおかげで、私のソリューションは非常に「Rails Like」で、私はそれに非常に満足しています! – KayoticSully

+3

良い解決策、はい。代わりにブール値自体を使うこともできますが、否定されます。例えば。私はやります: 'render:layout =>!request.xhr?' – smathy

関連する問題