2016-12-30 1 views
1

こんにちは私は、製品のインデックスページと製品の表示ページにのみ、ナビゲーションバー内の検索フォームを表示したいと思います。問題は、インデックスページと表示ページの両方に表示されていることですが、私がhomeをクリックしてroot_pathに移動すると、次のエラーが表示されます。Rails navbar条件付きおよび取得ルートルートに一致するルートがありません

{:action => "show"、:controller => "products"}必要なキーがありません:[: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

エラーは正しいです。現在のページが製品か製品パスかを確認しています。 2番目のIDはIDを取得するため、エラーが発生します。あなたは、@ cemanのような現在のコントローラをチェックするだけです。 –

答えて

1

ちょうど、現在のコントローラをチェックする方が良いだろう。

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

あなたのwanna使用している場合はまた、あなたがそれを達成するために、製品のコントローラとアクションを確認することができ、あまりにも

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

action_nameへのアクセス権を持っています。以下のコードをチェックアウトしてください。別のルビーバージョンでのアクション名については

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

これは、製品のコントローラと両方のアクションをチェックしますRails - controller action name to string

を見てみましょう。

関連する問題