在Rails应用程序中为管理界面定义单独的视图和资产

时间:2011-11-10 10:52:59

标签: ruby-on-rails ruby ruby-on-rails-3.1

我正在尝试在Rails中为我的网站构建一个CMS,我希望为阅读我的网站的人们能够看到的所有视图分别设置样式,即indexshow视图以及处理创建,更新和删除视图的视图。我知道我应该将这两个区域分成单独的控制器并命名所有管理员的路由,但我对如何进行视图感到茫然。

有没有办法为特定的一组控制器指定布局,包括样式表和javascript文件?注意我正在使用Rails 3.1,所以现在我的所有样式表和脚本都被编译成单个文件,每个文件都提供服务。

3 个答案:

答案 0 :(得分:17)

我跑来跑去寻找一个非常相似的东西。很幸运能找到Iain Hecker的精彩教程文章。

Backends in Rails 3.1

使用命名空间和模板继承进行设置。最好的部分是他使用Jose Valim的inherited_resources gem来真正清理你的控制器。

无论如何,它确实让我走上正轨。

此外,对您的默认应用程序有帮助。确保使用:

//= require_directory .

而不是

//= require_tree

这将使sprockets仅加载当前目录中的文件。然后你可以添加一个带有自己的application.js文件的admin /文件夹来做同样的事情。

然后你在layouts / application.html.erb中使用:

<%= javascript_include_tag "application" %>

在layouts / admin / application.html.erb中:

<%= javascript_include_tag "admin/application" %>

希望有帮助...

亚当。

答案 1 :(得分:3)

对于CSS,我喜欢在我的application.html.erb中添加一些身体类,允许我将管理员与非管理员分开,以及b)彼此之间的各种控制器/动作。这是我的body标记通常看起来像

<body class="<%= 'admin' if admin? %> <%= params[:controller].parameterize %> <%= params[:controller].parameterize %>_<%= params[:action].parameterize %>">

其中admin?ApplicationHelper方法定义如下:

def admin?
    controller.class.name.split("::").first=="Admin"
end

对于JS,您需要处理特定于视图的javascript。为此,我要指出你here。在那里讨论的多个清单文件技术可能对您有用,因为您可以构建一个admin.js文件,其中包含您在Admin命名空间中所需的所有内容。

更新:我认为这是一个很好的问题,所以我写了一个更全面的回复here

答案 2 :(得分:1)

获得我认为你想要的东西的一种方法是使用<div id="index">索引的东西.... 然后使用nested layouts设置div的样式