次のコードは、ネストされたコードを受け入れ、「li」タグで生成する必要があります
def sidebar_link(text,link, color = nil)
recognized = Rails.application.routes.recognize_path(link)
output = ""
content_tag(:li, :class => ( "sticker sticker-color-#{color}" if color) ) do
if recognized[:controller] == params[:controller] && recognized[:action] == params[:action]
output << link_to( text, link, :class => 'lead')
else
output << link_to( text, link)
end
output << yield if block_given?
raw output
end
end
HAML ビュー:
%ul
= sidebar_link 'Tickets', tickets_path, :orange do
%ul.sub-menu
= sidebar_link "Service Requests #{ServiceRequest.all.count}", service_requests_path
= sidebar_link 'Problems', problems_path, :green
%li.divider
= sidebar_link 'Clients', clients_path, :blueDark
= sidebar_link 'Services', services_path, :red do
%ul.sub-menu
= sidebar_link 'Categories', categories_path
これにより、最初のリンクを除いて正しい HTML が生成されます。出力には「Tickets」という単語は含まれていませんが、それ以外はすべて問題ないようです。
では、なぜこの奇妙な動作が発生するのでしょうか? ヘルパー再帰が「出力」変数を台無しにしますか?