2012-07-02 44 views
12

我已經搜索過,並且一直未能找到此類機制的解決方案。我想在Rails中正常加載所有頁面,但每當我做一個Ajax請求時,我只想返回沒有佈局的頁面。因此,無論何時我做一個Ajax請求,我都可以在這些行上附加?page=true或其他東西,並讓Rails只返回沒有佈局的頁面。Rails在AJAX請求期間阻止佈局

這可能嗎?有沒有更好的方式來做到這一點,我失蹤了?

感謝您的幫助!

最終解決方案的工作代碼:

在控制所有你需要做的就是添加一點邏輯的format.htmlrespond_to塊。

show方法例如

def show 
    # code beforehand 

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

就是這樣!在AJAX請求期間阻止佈局!

注意:感謝smathy評論他的答案,這進一步簡化了。我原本有format.html { render :layout => nil if request.xhr? }這個解決方案工作得很好,但smathy的修改使它更簡單。

+0

是否可以在應用程序控制器中爲每個ajax請求執行相同操作?的 –

+0

可能重複[從不響應XHR時呈現佈局(http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

回答

8

你並不需要添加參數,request.xhr?會在你的控制器時,它是一個Ajax請求返回true。只需使用它來決定是否渲染布局。

+0

如何將這項工作?我試過'如果request.xhr?在show controller中渲染:layout => nil end。它返回一個錯誤。要麼我沒有使用request.xhr?正確或我試圖刪除錯誤的佈局。 – KayoticSully

+1

我能弄明白,謝謝你的信息。我將用我的實際最終工作代碼編輯該問題。感謝您的信息,我的解決方案非常「Rails Like」,我非常滿意! – KayoticSully

+3

好的解決方案,是的。另一種方法是使用布爾本身 - 但否定。例如。我會這樣做:'render:layout =>!request.xhr?' – smathy