目立たない ajax をサイトに追加しているので、リクエスト タイプに応じてレイアウトを設定する必要があります。
# 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 nil force default layout behavior with inheritanceによると、私はこれを試しました:
layout Proc.new { |controller| controller.request.xhr? ? 'ajax' : nil }
これは機能しません。レイアウトがまったく得られません。私が見つけた唯一の情報は、Rails がレイアウトを処理する方法が原因で、実際にはこれが機能しないという古いチャット ログです。
これを達成する方法はありますか?
nil を返す proc は機能しないため、満たされている条件でレイアウトを設定する方法はありますか (request.xhr? ここでは)。layout_if のようなもの。
それとも私はちょうど追加する必要があります
layout Proc.new { |controller| controller.request.xhr? ? 'ajax' : 'controller_name' }
レイアウトが異なるすべてのコントローラーに?
私の ajax リクエストは実際に html を返します。少しごまかして、それらの html 要素を .xml ファイルで返し、respond_to を使用してレイアウトを設定する必要がありますか? (別の理由から、これは素晴らしいことかもしれません。レイアウト コンテンツの有無にかかわらずアクセスする URL が異なると、ページ キャッシュが可能になりますが、これを実現する方法は他にもあります。)
または、もっと良い解決策があるかもしれません。