为什么这个haml代码块会出现'语法错误,意外的keyword_ensure,期待$ end'

时间:2011-12-01 18:39:19

标签: ruby ruby-on-rails-3 haml

= 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 ?,所以我不明白为什么会出现此错误消息。

1 个答案:

答案 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语句的位置等)。同样的事情适用于其他代码帮助程序,例如您正在使用的选项卡。