在Rails中调用body css类的正确语法是什么?

时间:2013-06-08 17:55:43

标签: ruby-on-rails

在我的application.html.erb中,我将正文的css类设置为当前控制器和动作:

<body class="<%= controller_name %> <%= action_name %>">

现在我想在页面上显示某个链接,具体取决于body类的值。如何在以下if else语句中调用body类?

<% if ?body_class? == 'index' %>

<%= link_to 'This link', '#' %>

<% else %>

<%= link_to 'That link', '#' %>

<% end %>

3 个答案:

答案 0 :(得分:2)

当您输出body标签时,您没有分配任何变量,因此您以后不能将其称为“body_class”。由于您的身体类只是控制器+动作,您可以执行以下操作:

<% if params[:controller] == 'foo' and params[:action] == 'index' %>

或者如果你在foo控制器中,那么只需要params [:action]。或者在您的应用程序上有一个before_filter,它可以执行以下操作:

@body_classes = [params[:controller], params[:action]]

然后是帮手:

def body_classes
  @body_classes.join(' ')
end

def body_has_class?(name)
  @body_classes.include?(name)
end

然后在你的布局中:

<body class="<%= body_classes %>">
<% if body_has_class?('index') %>

答案 1 :(得分:1)

您可以像以前一样使用action_name

<%= link_to (action_name == 'index' ? 'This link' : 'That link'), '#' %>

答案 2 :(得分:0)

您可以使用内置link_to_if助手以及current_page

link_to_if (current_page?(action: "index), "This Path", this_path ) do
  link_to "That path", that_path
end

将产生

# If current action is index
<a href="/this/path">This path</a>

# Else
<a href="/that/path">That path</a>