Rails中嵌套资源的嵌套布局

时间:2009-12-09 18:28:18

标签: ruby-on-rails layout nested-resources

是否可以自动将指定的布局模板分配给特定的控制器以及嵌套在其中的所有资源,如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这样的网址时,我应该会看到我的news.html.erb布局。截至目前,我没有。

我显然不希望为嵌套在父级中的每个控制器重新创建相同的布局文件(即使我将布局拉出来并将其放在共享部分中)。我对于在特定控制器本身中指定布局模板更加兴奋(这个具体的例子是一种临时的东西,虽然我将在未来的路上有一个'真正'的用例)。

谢谢!

3 个答案:

答案 0 :(得分:1)

为了清晰起见编辑原始问题(答案并没有完全回答中心问题),我意识到我需要做的是让嵌套的控制器类继承自顶级父级。这不仅可以更轻松地解决核心问题,还可以解决其他一些困扰我的问题。

(我会说“a'doy”但是还有其他人正在使用这个应用程序,它会掩盖通常会更明显的内容。)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我对在控制器中指定布局模板感到兴奋

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

class ArticlesController < ActionController::Base
  layout :news
end
相关问题