Haml形式期待$ end?

时间:2014-08-05 01:18:14

标签: ruby-on-rails haml

嗨,我对Rails真的很陌生,当然还有Haml,我已经尝试了几天了。

使用此部分渲染页面时出现错误:

app/views/todos/_form.html.haml:19: syntax error,unexpected keyword_end, expecting $end

(请原谅我的缩进错误,我没有选择复制和粘贴) _form.html.haml内容:

1 = form_tag :todo do |f|
2     %br
3         = f.label :done
4             = f.check_box :done
5         = f.label :title
6         = f.text_field :title
7     %br
8         = f.label :urgent
9             = f.check_box :urgent
10     %br
11         = f.label :important
12            = f.check_box :important
13     %br
14         = f.label :description
15     %br
16         = f.text_area :description
17     %br
18         = f.submit "Save"
19 

2 个答案:

答案 0 :(得分:3)

在HAML中,除=之外,您不能拥有任何直接子元素,除非它是一个块。因为=是ruby代码而不是html模板的一部分。

如果你想要=的子元素需要传递给像= form_tag do |f|那样的红宝石块。

因此导致此错误的是check_box。

在这个例子中,我会将表单助手移动到一行,如下所示:

= form_tag :todo do |f|
  %br
    = f.label :done, f.check_box(:done)
    = f.label :title
    = f.text_field :title
  %br
    = f.label :urgent, f.check_box(:urgent)
  %br
    = f.label :important, f.check_box(:important)
  %br
    = f.label :description
    = f.text_area :description
  %br
    = f.submit "Save"

您还可以通过在方法调用结束时添加do来告诉标签帮助程序接受块:

= form_tag :todo do |f|
  %br
    = f.label :done do
      = f.check_box(:done)
    ...

甚至可以使用haml元素而不是rails form helper来制作标签:

= form_tag :todo do |f|
  %br
    %label{:for => 'done'}
      = f.check_box :done
    ...

答案 1 :(得分:1)

您的缩进和嵌套不一致。我通常用2个空格。

尝试:

= form_tag :todo do |f|
  %br
    = f.label :done
    = f.check_box :done
    = f.label :title
    = f.text_field :title
  %br
    = f.label :urgent
    = f.check_box :urgent
  %br
    = f.label :important
    = f.check_box :important
  %br
    = f.label :description
   %br
    = f.text_area :description
   %br
    = f.submit "Save"

这很好地转换为erb:

<%= form_tag :todo do |f| %>
  <br>
    <%= f.label :done %>
    <%= f.check_box :done %>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </br>
  <br>
    <%= f.label :urgent %>
    <%= f.check_box :urgent %>
  </br>
  <br>
    <%= f.label :important %>
    <%= f.check_box :important %>
  </br>
  <br>
    <%= f.label :description %>
  </br>
<% end %>