2016-12-30 5 views
1

Здравствуйте, я хочу показать форму поиска внутри навигационной панели только на индексной странице продуктов и странице показа продукта. Дело в том, что оно отображается как на странице индекса, так и на странице показа, но когда я нажимаю на дом, чтобы перейти к корневому пути, я получаю следующую ошибку:Rails navbar условный и получение Нет совпадений маршрутов в корне_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 %>

+0

Ошибка, которую вы получаете, верна. Вы проверяете, является ли текущая страница продуктом или продуктом. Поскольку второй принимает идентификатор, он дает вам ошибку. Вы должны просто проверить текущий контроллер, как упомянуто @iceman. –

ответ

1

Было бы лучше просто проверить текущий контроллер.

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

У вас также есть доступ к action_name, если вы хотите использовать, что слишком

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

Вы можете проверить контроллер продукта и действия для того, чтобы достичь этого. Оформить заказ ниже.

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

Для имени действия в другой версии рубинового взглянуть на Rails - controller action name to string

это будет проверять для контроллера продукта и оба действия.

Смежные вопросы