Rails - 在application.html.erb中修改html类的正确方法是什么?

时间:2015-12-18 18:53:12

标签: html ruby-on-rails ruby

我在现有的rails应用程序上工作。 对于某些页面,我需要在"内容"中添加一个类。 div和其他div 它位于application.html.erb文件中。 假设我有div class =" content",对于某些页面我需要div class =" content widgetgrid"。我想知道"正确的方式"要做到这一点,还是更重要的是Rails-y这样做的方法?

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

  1. 它没有用。我无法弄清楚如何使application.html.erb文件可以访问控制器的实例变量。
  2. 我不确定这是否是正确的方法,或者用这种方法来实现这一目标。
  3. 任何建议都将受到高度赞赏。 :)

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

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

select id_obj, min(name_obj), max(tot_obj) tot_obj
from (select a.id_obj, min(b.name_obj), sum(a.tot_obj) tot_obj 
      from detailsell a join object b using (id_brg)
      group by id_obj) x
group by id_obj;

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

layout 'some_layout_file' 

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

有许多不同的方法可以解决你的问题...以上就是我更喜欢接近它的方法。