为什么这个 haml 代码块会给出“语法错误,意外的 keywords_ensure,期望 $end”?

发布于 2024-12-19 10:34:53 字数 948 浏览 0 评论 0原文

= 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 问题)

我已经检查了缩进,一切都应该是正确的,而 else 应该对应于 if !menu_tab.only_if.nil? ,所以我不明白为什么会出现此错误消息。

= 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

The error message is

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

(btw the line numbers are wrong too, I don't know if this is a haml thing)

I have checked the indentation and everything should be correct, and that else should correspond to if !menu_tab.only_if.nil?, so I don't understand why this error message is appearing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初吻给了烟 2024-12-26 10:34:55

我猜这是因为你正在这样做:

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

I'm guessing it's because you're doing this:

= tabs_tag(:open_tabs => { :id => "menu" }) do |tab| 

and

= tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path, :span => "arrow-down"

and then nesting content under that which is illegal in HAML. You get the same error when you try to do:

= render :partial => "some/view", :locals => { :local_var => @var }
  - if something
    -# do something

HAML will choke on that since it doesn't know how to render the if statement within the partial file (based on spacing, location of the if statement within it, etc.). Same thing applies with other code helpers like the tabs you're using.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文