= tabs_tag(:open_tabs => { :id => "menu" }) do |tab|
- menu_tabs.each do |menu_tab|
- if !menu_tab.only_if.nil?
- if menu_tab.only_if.call
= tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path, :span => "arrow-down"
- if !menu_tab.child_elements.blank?
%ul
- menu_tab.child_elements.each do |child_tab|
%li
=link_to child_tab.display_name, child_tab.path
- else
= tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path
错误消息是
app/views/menu_builder/_tab_view.html.haml:15: syntax error, unexpected keyword_else, expecting keyword_end
app/views/menu_builder/_tab_view.html.haml:21: syntax error, unexpected keyword_ensure, expecting $end
(顺便说一下,行号也是错的,我不知道这是不是haml的事情)
我已经检查了缩进,所有内容都应该是正确的,其他应该对应于if!menu_tab.only_if.nil ?,所以我不明白为什么会出现此错误消息。
答案 0 :(得分:3)
我猜这是因为你这样做:
= tabs_tag(:open_tabs => { :id => "menu" }) do |tab|
和
= tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path, :span => "arrow-down"
然后将内容嵌套在HAML中非法的内容下。当您尝试执行此操作时会出现相同的错误:
= render :partial => "some/view", :locals => { :local_var => @var }
- if something
-# do something
HAML会因此而窒息,因为它不知道如何在部分文件中呈现if
语句(基于空格,if语句的位置等)。同样的事情适用于其他代码帮助程序,例如您正在使用的选项卡。