0

是否可以将指定的布局模板自动分配给特定的控制器以及嵌套在其中的所有资源,如 routes.rb 中指定的那样?此布局应仅应用指定的控制器视图和嵌套在其中的控制器视图;它不需要像 application.html.erb 那样应用于应用程序中的每个视图(我实际上将专用布局与应用程序布局一起用于嵌套布局)。

所以,例如,如果我有

map.resources :news, :shallow => true do |n|
  n.resources :articles do |a|
    a.resources :comments
  end
end

当我访问一个 url 时,localhost/news/1/articles/new我应该看到我的news.html.erb布局在起作用。到目前为止,我没有。

我显然不想为嵌套在父级中的每个控制器重新创建相同的布局文件(即使我会拉出布局并将其放在共享部分中)。对于在特定控制器本身中指定布局模板,我什至不那么兴奋(这个特定示例是一种暂时的东西,尽管我将在更远的地方为此提供一个“真实”用例)。

谢谢!

4

3 回答 3

1

为清晰起见编辑原始问题(答案并没有完全回答中心问题),我意识到我需要做的是让嵌套控制器类从顶级父级继承。这不仅使解决中心问题变得更容易,而且还解决了其他一些一直困扰我的问题。

(我会说“a'doy”,但还有其他人在开发这个应用程序,这掩盖了通常更明显的东西。)

于 2009-12-11T17:16:26.410 回答
0

对于您的 news.html.erb 问题,这是一个错字吗?您应该会看到您的 view/articles 文件夹中的 new.html.erb 文件(假设为默认布局),而不是 news.html.erb 文件。您必须确保您的@news 实例变量已设置并且您的form_for 将用于[@news, @article] 而不仅仅是@article。

此外,您不必为每个控制器创建一个布局,您可以在您的布局文件夹中创建一个 application.html.erb,并且所有在布局文件夹中没有布局的控制器都将使用 application.html.erb 和您不必在控制器中指定它,只需删除与控制器同名的布局即可。

于 2009-12-09T23:09:51.340 回答
0

我对在控制器本身中指定布局模板更不兴奋

没有理由担心这一点。这就是你所做的。它是专门为此目的而创建的一行 DSL 代码。不笨重。

class ArticlesController < ActionController::Base
  layout :news
end
于 2009-12-11T05:36:15.420 回答