【问题标题】:Why is this block of haml code giving 'syntax error, unexpected keyword_ensure, expecting $end'为什么这个haml代码块给出'语法错误,意外keyword_ensure,期待$end'
【发布时间】:2011-12-01 18:39:18
【问题描述】:
= 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?,所以我不明白为什么会出现这个错误消息。

【问题讨论】:

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


    【解决方案1】:

    我猜是因为你这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2013-07-15
      • 2012-02-23
      • 1970-01-01
      • 2012-03-19
      • 2017-09-12
      • 1970-01-01
      相关资源
      最近更新 更多