我添加不顯眼的AJAX到我的網站,所以我需要設置佈局取決於請求類型:返回默認佈局行爲使用一個Proc
# app/controllers/application_controller.rb
layout Proc.new { |controller| controller.request.xhr? ? 'ajax' : 'application' }
# app/views/layout/ajax.html.erb
<%= render :partial => "shared/flash", :object => flash %>
<%= yield %>
但我也想使用嵌套的佈局和有我的JavaScript處理插入ajax檢索內容的位置。根據與繼承rails api佈局爲零力默認佈局的行爲,所以我嘗試這樣做:
layout Proc.new { |controller| controller.request.xhr? ? 'ajax' : nil }
不工作,我沒有得到任何佈局都沒有。我發現的唯一一條信息是舊的聊天記錄,說這確實不起作用,因爲Rails處理佈局的方式。
有沒有辦法做到這一點?
由於proc返回的nil不起作用,是他們在遇到遇到的情況下設置佈局的一種方法(request.xhr?here)。像layout_if。
或者我應該只需要添加
layout Proc.new { |controller| controller.request.xhr? ? 'ajax' : 'controller_name' }
到每個控制器有不同的佈局?
我的ajax請求實際上返回html,我應該作弊一點,並在.xml文件中返回這些html元素,並使用respond_to來設置佈局? (這可能是很大的,還有另外一個原因,有型動物的URL與不版面內容訪問可能允許頁面緩存,但也有其他的方式來實現這一目標。)
或者,也許有一個辦法更好的解決方案。