Ruby on rails 期望$end的Haml表单?

Ruby on rails 期望$end的Haml表单?,ruby-on-rails,haml,Ruby On Rails,Haml,嗨,我对Rails真的很陌生,当然还有Haml,我已经花了几天的时间想弄明白这一点 使用此部分渲染页面时,出现错误: app/views/todos/\u form.html.haml:19:语法错误,意外关键字\u end,应为$end (请原谅我的缩进错误,我没有复制和粘贴的选项) _form.html.haml内容: 1 = form_tag :todo do |f| 2 %br 3 = f.label :done 4 = f.check_b

嗨,我对Rails真的很陌生,当然还有Haml,我已经花了几天的时间想弄明白这一点

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

app/views/todos/\u form.html.haml:19:语法错误,意外关键字\u end,应为$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 

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

尝试:

这很好地转化为雇员再培训:

<%= 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 %>










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

尝试:

这很好地转化为雇员再培训:

<%= 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 %>










在HAML中,除非是块,否则不能有任何直接子元素指向
=
。因为
=
是ruby代码,而不是html模板的一部分

如果您想将子元素传递给
=
,则需要像
=form_标记do | f |
那样传递给ruby块

因此,是您的复选框导致了此错误

在本例中,我将两个表单帮助程序移动到一行,如下所示:

= 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_tag :todo do |f|
  %br
    %label{:for => 'done'}
      = f.check_box :done
    ...

在HAML中,除非是块,否则不能将任何直接子元素添加到
=
。因为
=
是ruby代码,而不是html模板的一部分

如果您想将子元素传递给
=
,则需要像
=form_标记do | f |
那样传递给ruby块

因此,是您的复选框导致了此错误

在本例中,我将两个表单帮助程序移动到一行,如下所示:

= 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_tag :todo do |f|
  %br
    %label{:for => 'done'}
      = f.check_box :done
    ...

这就是你正在使用的缩进吗?(第1行的@CodeGnome
=form\u tag
复选框行向我突出)是正确的,因为您希望在页面上显示表单及其内容。子表单元素只是传递给ruby表单块,然后第1行将批次呈现到页面中。这就是您使用的缩进吗?(第1行的@CodeGnome
=form\u tag
复选框行向我突出)是正确的,因为您希望在页面上显示表单及其内容。子表单元素只是传递到ruby表单块,然后第1行将该批次呈现到页面中。complistic您完成了吗谢谢!如何将这些复选框嵌套在标签中?是否有其他语法?我在Haml参考网站上找不到它。@sgp667,我添加了第二种方法。但是,这两种方法都应该嵌套,因为第一种方法将复选框的html发送到label helper的第二个参数。如果您想使用rails helpers,可以执行“f.label:done do”,因为label方法接受一个block@arieljuod,我不知道label接受了一个block,这很酷,也很有意义。我将更新我的答案。请注意%label{:for=>'done'}语法提供的行为与帮助程序不同,帮助程序将查找字段的属性转换并打印属性名称,如果您需要与帮助程序类似的内容,则需要%label{for::done};完成属性的标签=f、 复选框:完成;,如果没有,标签是无用的,因为它里面只有一个输入,但没有标签文本,我只推荐帮助者,除非有特别的原因不使用它。谢谢!如何将这些复选框嵌套在标签中?是否有其他语法?我在Haml参考网站上找不到它。@sgp667,我添加了第二种方法。但是,这两种方法都应该嵌套,因为第一种方法将复选框的html发送到label helper的第二个参数。如果您想使用rails helpers,可以执行“f.label:done do”,因为label方法接受一个block@arieljuod,我不知道label接受了一个block,这很酷,也很有意义。我将更新我的答案。请注意%label{:for=>'done'}语法提供的行为与帮助程序不同,帮助程序将查找字段的属性转换并打印属性名称,如果您需要与帮助程序类似的内容,则需要%label{for::done};完成属性的标签=f、 复选框:完成;,如果没有,标签是无用的,因为它里面只有一个输入,但没有标签文本,我只推荐助手,除非有特别的理由不使用它