0

在我的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 %>
4

3 回答 3

2

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

<% 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') %>
于 2013-06-08T18:00:57.640 回答
1

您可以action_name像以前一样使用:

<%= link_to (action_name == 'index' ? 'This link' : 'That link'), '#' %>
于 2013-06-08T18:00:58.627 回答
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>
于 2013-06-08T19:26:18.797 回答