在 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 应用程序布局文件中动态设置类的主要内容,如果未能解决你的问题,请参考以下文章

VueJS 与多页 Rails 6 应用程序与 Turbolinks - 布局

使特定的 Rails 视图使用某种布局

android 用java动态设置布局(增添删除修改布局)

rem布局,js动态设置html的fontsize大小

Rails - 从模型中获取值到应用程序布局中

rem布局,js动态设置html的fontsize大小