Ruby On Rails - 基于控制器和动作的HTML条件

时间:2015-03-18 11:50:47

标签: ruby-on-rails ruby-on-rails-4

我有一个语法问题,我正在尝试理清。我只是想检查一个控制器/动作是否被加载,如果是这样,做一些事情,如果不做其他事情,似乎很简单。这给了我一个错误:

<% if (:controller => 'home', :action => 'index') do %>
    <div class="header">
<% else %>
    <div class="header-2">
<% end %>  

有人可以帮我解决语法问题吗?谢谢!

4 个答案:

答案 0 :(得分:5)

您必须像这样修改if子句:

<% if controller_name == 'home' && action_name == 'index' %>

此外,如果不得不多次调用,我建议你定义一个帮手。

<强> application_helper.rb

def home_index?
  controller_name == 'home' && action_name == 'index'
end

这样你的代码就会更具可读性:

<强> some_view.html.erb

<div class='<%= home_index? ? "foo" : "bar" %>'>

答案 1 :(得分:3)

您可以使用Rails提供的帮助程序来检查这些事情(当前控制器/操作,参数......):current_page?

<% if current_page?(controller: 'home', action: 'index') %>
  <div class="header">
<% else %>
  <div class="header-2">
<% end %> 

文档:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F

使用此帮助程序,您还可以检查特定参数:

 current_page?(controller: 'home', action: 'index', page: '2')

答案 2 :(得分:1)

在视图中,您需要检查controller_nameaction_name。试试这个

<% if controller_name == 'home' && action_name == 'index' %>
    <div class="header">
<% else %>
    <div class="header-2">
<% end %> 

答案 3 :(得分:0)

在您的视图中尝试此操作,它将起作用

<% if (controller_name == 'applications' && action_name == 'index') %>
    <div class="header">
<%else%>
    <div class="header-2">
<%end%>