Rails导航栏有条件并且在root_path中获得无路由匹配

时间:2016-12-30 13:20:17

标签: ruby-on-rails twitter-bootstrap search

您好我想在产品的索引页面和产品的显示页面中显示导航栏内的搜索表单。问题是它在索引页面和显示页面上都显示,但是当我单击home转到root_path时,我收到以下错误:

没有路由匹配{:action =>" show",:controller =>"产品"}缺少必需的密钥:[:id]

我该如何避免?这是我在application.html.erb中的代码:



<% if current_page?(products_path) || (product_path) %>
      <div class="col-sm-3 col-md-3 pull-right">
        <form class="navbar-form" role="search">
        <div class="input-group">
            <input type="text" class="form-control" placeholder="Search" name="search_term" id="search_term">
            <div class="input-group-btn">
                <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
            </div>
        </div>
        </form>
        </div>
    <% end %>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

最好只检查当前的控制器。

<% if controller.controller_name == 'products' %>
  ....

如果您也想使用action_name,也可以访问

<% if controller.controller_name == 'products' && controller.action_name == 'show' %>

答案 1 :(得分:0)

您可以检查产品控制器和操作以实现此目的。查看以下代码。

if controller.controller_name == 'products' && %w(index show).include?(action_name)

对于不同ruby版本中的操作名称,请查看Rails - controller action name to string

这将检查产品控制器和两个操作。