【问题标题】:Rails - What's the right way to modify html classes in application.html.erb?Rails - 在 application.html.erb 中修改 html 类的正确方法是什么?
【发布时间】:2015-12-18 18:53:12
【问题描述】:

我在一个现有的 Rails 应用程序上工作。 对于某些页面,我需要在“内容”div 和其他 div 中添加一个类 它驻留在 application.html.erb 文件中。 假设我有 div class="content",对于某些页面我需要 div class="content widgetgrid"。我想知道执行此操作的“正确方法”是什么,或者更重要的是 Rails-y 执行此操作的方法是什么?

我想过定义一个实例变量并将其传递给 application.html.erb 文件。好吧:

  1. 它不起作用。我不知道如何让 application.html.erb 文件可以访问控制器的实例变量。
  2. 我不确定这是执行此操作的正确方法,还是执行此操作的 rails 方法。

任何建议将不胜感激。 :)

【问题讨论】:

  • 听起来一种选择可能是在您的 erb 模板中使用 if 语句包含该类。粗略示例:<div class="content <%= 'widgetgrid' if some-condition == true %>">

标签: html ruby-on-rails ruby


【解决方案1】:

如果它只是一个简单的东西,比如不同的类,你可以使用content_for,而不是创建一个全新的布局,如here 所述。在你看来,你会这样做

<% content_for :my_additional_classes, 'some classes you want' %>

然后在您的布局application.html.erb 的适当位置读出它。例如

# Layout stuff ...

<div class="always_used_class <%= yield :my_additional_classes %>">
  # content...
</div>

# More layout stuff ...

编辑:这假设您想在视图中设置此内容(这是有道理的,因为应该在视图中定义与视图相关的东西,这是标准的方式)。如果您真的想在控制器中执行此操作,您还可以使用以下内容来设置内容

view_context.content_for(:my_additional_classes, 'some_additional_class')

【讨论】:

  • 我不太明白。它如何帮助我更改某些控制器方法的 application.html.erb 文件?
  • @vegansound 我扩展了我的答案,现在更有意义了吗?您可以将我的编辑与一些 before_action 一起使用,以获得您想要的行为。
【解决方案2】:

在这种情况下,我很可能只使用各种布局文件。您可以通过以下方式在 Rails 中应用特定于控制器的布局:

layout 'some_layout_file' 

您还可以使用控制器中的方法来动态加载布局(我们实际上在工作中为使用基于子域的不同布局的应用程序执行此操作。

layout :set_layout

def set_layout
  # some awesome Ruby code here that sets your layout 
end

您也可以在控制器的方法/操作块中设置布局。

有许多不同的方法可以解决您的问题……以上就是我喜欢的解决方法。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多