Ruby haml 意外结束错误

Ruby haml unexpected ending error

= simple_form_for @pin, html: { multipart: true} do |f|
- if @pin.errors.any?
    #errors
        %h2
        = pluralize(@pin.errors.count, "errors")
        prevented this Pin from saving
        %ul
            - @pin.errors.full_messages.each do |msg|
            %li= msg
.form-group
    = f.input :title, input_html: { class: 'form-control' } 

.form-group
    = f.input :description, input_html:{ class: 'form-control' }     

= f.button :submit, class: "btn btn-primary"    

有人能告诉我为什么这会返回下面针对 rails

的错误吗

/Users/frankchen/project/pin_board/app/views/pins/_form.html.haml:17: syntax error, unexpected keyword_ensure, expecting keyword_end ...:Util.html_safe(_erbout);ensure;@haml_buffer = @haml_buffer.... ... ^ /Users/frankchen/project/pin_board/app/views/pins/_form.html.haml:20: syntax error, unexpected end-of-input, expecting keyword_end

如果是 HAML,则很可能是缩进问题。我无法匹配您提供的行号,因为我们只看到了代码片段,但我猜测这两行之间的缩进已关闭:

- @pin.errors.full_messages.each do |msg|
%li= msg

无法真正判断粘贴代码时代码缩进是否弄乱了,或者实际上是这样,但是是的,您有几个错误的缩进。例如:

= simple_form_for @pin, html: { multipart: true} do |f|
- if @pin.errors

- if 应该缩进 2 个空格。所以它在它上面的简单形式的范围内。同样适用于您 ul 及其 each

中的 li

在我的例子中,当我删除 %ul- @pin.errors.full_messages.each do |msg| 之间的缩进时它起作用了。我仍然不知道原因,因为 - @pin.errors.full_messages.each do |msg| 应该在 @ul 标签内。

%ul
- @pin.errors.full_messages.each do |msg|
  %li= msg

就我而言,这是一个漏引号:

= link_to 'How to create an offer, '#', class: 'icu-card-title-link card-title'