在 Rails 应用程序布局文件中动态设置类
Posted
技术标签:
【中文标题】在 Rails 应用程序布局文件中动态设置类【英文标题】:set a class dynamically in Rails application layout file 【发布时间】:2014-09-02 00:13:38 【问题描述】:问题是这样的:
我的应用程序布局文件如下所示:
app/views/layouts/application.html.erb
...
<section>
<%= yield %>
</section>
...
现在我想做的是动态设置 section 元素的类,这取决于我正在渲染的视图
例如,如果我从以下位置渲染仪表板视图: /app/views/admin/news_items/index.html.erb
我希望将 section 元素的类动态设置为“仪表板”:
<section class="dashboard">
<%= yield %>
</section>
Rails 可以做到这一点吗?
感谢您的帮助,
安东尼
【问题讨论】:
您希望将您的类设置为控制器名称? 【参考方案1】:据我所知,您希望特定命名空间具有不同的布局,对吗?
您可以通过为不同的控制器/命名空间指定不同的布局来轻松实现这一点
# In DashboardController
layout 'dashboard'
上面将使用app/views/layouts
下的dashboard.html.erb
用于DashboardController 内部或继承自它的所有操作。
希望对你有帮助
【讨论】:
感谢您的建议。我已经尝试过了,但问题是我想要 app/views/layouts/application.html.erb 中的 app/views/layout/dashboard.html.erb,这样我就不必复制所有布局,但是可以注入特定于仪表板页面的布局。 酷!我认为@Vinay 的建议是快速获胜。但我会将类名确定放入应用程序助手的方法中。像def section_class; ...; end
这样的东西,这将为仪表板相关的东西(基于控制器名称)或不同场景所需的任何其他东西返回“仪表板”。
我在这里找到了一个非常好的解决方案:blog.55minutes.com/2014/02/easier-nested-layouts-in-rails-34。现在我有一个仪表板布局文件(app/views/layouts/dashboard.html.erb),它从 app/views/layouts/application.html.erb 继承它的布局
@Toontje 是的,嵌套继承的布局会给你你正在寻找的东西,但不是'Rails 方式'恕我直言。而且在那篇文章中,他说那是一种黑客行为;)。对于生产代码,我试图避免使用“hack/patch”方法。
如果它是一个 hack,它是一个相当不错的 :)。现在,我的所有管理页面都继承了仪表板布局。我所要做的就是:在仪表板控制器中布局“仪表板”。在 dashboard.html.erb 布局中,我只需要放置特定于管理页面的布局,其他布局继承自 application.html.erb【参考方案2】:
也许你可以做这样的事情?
<section class="<%= controller.controller_name %>-<%= controller.action_name %>">
这将添加一个像这样的类
<section class="dashboard-show">
来源:https://***.com/a/16813823/3651372
【讨论】:
以上是关于在 Rails 应用程序布局文件中动态设置类的主要内容,如果未能解决你的问题,请参考以下文章