css クラス (選択または選択解除) を決定するアプリケーション ヘルパーと、アプリケーション ヘルパーの上部にあるナビゲーション バーのリンク アドレスがあります。
コントローラーをテストすると、navbar に関する大量のエラーが発生します (変数は nil を返します)。ナビゲーションバーは個々のコントローラーとは関係なく、すべてのページに表示されるため、これが最も簡単な方法のようです。
アプリケーションヘルパーで:
def navbar_method(category)
c = Category.find_by_name(category)
children = c.children.map {|child| child.name}
if category == "All"
if params[:id] == category || params[:category] == category
"on"
else
"off"
end
else
if params[:id] == category || children.include?(params[:id]) || params[:category] == category || children.include?(params[:category])
"on"
else
"off"
end
end
これは、nav_link メソッドを使用する Navbar ビューのスニペットです。これは、nav クラスと同様に、私が作成した別のヘルパー メソッドです。これは水平ドロップダウン メニューです。
layouts/application.html.erb:
<li id="Home" class="<%= nav_class("All") %>"><%= nav_link("All") %>
<ul>
</ul></li>
<li id="Writing" class="<%= nav_class("Writing") %>"><%= nav_link("Writing") %>
<ul>
<li class="<%= nav_class("Educational") %>"><%= nav_link("Educational") %>
このメソッドのすべてが nil になるため、次のようにしました。
def navbar_method(category)
unless Rails.env.test?
c = Category.find_by_name(category)
#see above
end
end
どう思いますか?わかった?良くないですよ?
NOT OK に 1 票を獲得したので、もう少し説明しようと思いました。何らかの理由で、私が含める可能性のあるフィクスチャにもかかわらず、カテゴリはテストで nil を返しています...ナビゲーションバーをテストするために広範な統合テストを行うことができると考えました...