Railsの中にネストされたリソースのネストされたレイアウト
-
18-09-2019 - |
質問
これはroutes.rbをで指定されているように自動的に、特定のコントローラと、その中にネストされたすべてのリソースに指定されたレイアウトテンプレートを割り当てることは可能ですか?このレイアウトは、必ず指定のコントローラのビューとその中に入れ子になったものを適用する必要があります。 (私は実際には、ネストされたレイアウトのためのアプリケーションのレイアウトを持つ専門的なレイアウトを使用しています)application.html.erbと同じように、それは、アプリケーション内のすべてのビューに適用する必要はありません。
ですから、例えば、私が持っていた場合は、
map.resources :news, :shallow => true do |n|
n.resources :articles do |a|
a.resources :comments
end
end
私はlocalhost/news/1/articles/new
のようなURLを訪問したときに、私はアクションで私のnews.html.erb
レイアウトが表示されるはずです。今のところ、私にはありません。
私は明らかに親の中にネストされた各コントローラに同じレイアウトファイルを再作成する必要はありません。私もあまり興奮し、特定のコントローラ自身(私は道を少しさらに、このために「本物の」ユースケースを持っているでしょうが、この具体的な例としては、一時的なものの一種である)でレイアウトテンプレートの指定についてです。
ありがとうございます。
解決
(答えは非常に中心的な問題に答えていなかった)明確にするため、元の質問を編集する、私は何をする必要があるか実現し、ネストされたコントローラクラスはトップレベルの親から継承しています。だけでなく、これは簡単に中心的な問題を解決する作るん、それは私のしつこいされているいくつか他のものを修正します。
(私は「a'doyを」と言うだろうが、通常はもう少し明らかであろうものを隠さこのアプリに取り組んで他の人が、あります。)
他のヒント
あなたのnews.html.erb問題のために、タイプミスということでしょうか?あなたは、あなたのビュー/記事フォルダ(デフォルトのレイアウトを想定)とないnews.html.erbファイルにありますあなたのnew.html.erbファイルが表示されるはずです。あなたの@newsインスタンス変数が設定されているとあなたのform_forだけではなく、@articleの[@news、@article]のためになることを確認する必要があります。
また、あなたはあなたのレイアウトフォルダに1 application.html.erbを作成することができ、各コントローラのレイアウトを作成する必要はありませんとレイアウトフォルダ内のレイアウトを持っていないすべてのコントローラはapplication.htmlを使用します。 .erbとあなただけのコントローラと同じ名前のレイアウトを削除し、あなたのコントローラでそれを指定する必要はありません。
「は、私もあまり感激コントローラで自分自身をレイアウトテンプレートの指定についてだ。の」
この心配する理由はありません。これは、あなたが何をすべきか、単純です。これは、特にこの目的のために作成し、DSLコードの1行です。不格好ではない。
class ArticlesController < ActionController::Base
layout :news
end