Rails HAML转换问题 - 意外的kENSURE,期待kEND

时间:2009-06-09 17:14:46

标签: ruby-on-rails haml

我正在尝试切换到使用HAML查看我的视图,但我不断收到意外的KENSURE消息。我用html2haml来切换工作视图文件。首先通过它告诉我,我不需要html2haml在其输出中的结束,所以我删除它,现在我得到错误,看起来它抱怨表单没有结束。

我做错了什么?

错误消息:

compile error
app/views/sessions/new.html.haml:20: syntax error, unexpected kENSURE, expecting kEND
app/views/sessions/new.html.haml:22: syntax error, unexpected $end, expecting kEND

application.html.haml:

!!!
%html
%head
  %title
    = APP_CONFIG[:site_name] + ': ' + @page_title  
  == <meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />
  == <meta http-equiv="imagetoolbar" content="no"  />
  == <meta name="distribution" content="all" />
  == <meta name="robots" content="all"  />
  == <meta name="resource-type" content="document" />
  == <meta name="MSSmartTagsPreventParsing" content="true"   />
  = stylesheet_link_tag 'base'
  = javascript_include_tag :defaults

  %body
    #container
      #header
        - if logged_in?
          = link_to 'Logout', logout_path
        - else
          = link_to 'Login', login_path
          = link_to 'Signup', signup_path
      #content
        = flash_messages
        = yield :layout

和sessions / new.html.haml

= title "Login", :h2
- form_tag session_path do
%fieldset
  %legend
    Your Details
  %ol
    %li
      = label_tag 'login', 'Username'
      = text_field_tag 'login', @login
    %li
      = label_tag 'password'
      = password_field_tag 'password', nil
    %li
      = label_tag 'remember_me', 'Remember me'
      = check_box_tag 'remember_me', '1', @remember_me
.buttons
  = submit_tag 'Login'
  = link_to 'Forgotten Password', forgot_password_path

4 个答案:

答案 0 :(得分:13)

当你的间距错误时,这就是haml所做的事情。 html2haml为您完成大部分工作,但您仍需要查看更改。 sessions / new.html.haml中的问题是你正在开始一个没有内容的do块:

- form_tag session_path do
%fieldset

整个字段集应该嵌套(缩进)在do块中。因为根本没有内容,haml无法输入end声明,所以当文件被解释时,你得到:

unexpected $end, expecting kEND

意思是“我点到文件末尾($ end),我期待结束关键字(kEND)”

答案 1 :(得分:1)

如图所示,第一个块有%body缩进一个级别多于%head,%head与%html处于同一级别,两者都不好。如果它有效,你可能会得到像

这样的东西
<html>
</html>
<head>
  ...
  <body>
  ...
  </body>
</head>

我认为大多数浏览器都会窒息! ; - )

一般来说,我不是html2haml的粉丝,虽然它努力尝试但似乎无法处理所有事情。除非你有大量的视图文件,否则我会倾向于花时间手工修改文件。你不必一次完成所有这些,为什么不随意翻译呢?你也会以这种方式学习更多关于HAML的知识。足够 - 希望 - 你会发现整个缩进的东西变得本能,之后进步开始加速。

答案 2 :(得分:1)

HAML在标签而不是空格和错误缩进等问题上的表现非常糟糕。

我的解决方法(至少在使用TextMate的OSX上)是使用TextMate,使用HAML/SASS bundle installed。然后我使用CMD- [取消缩进文本,然后按照CMD-]正确地重新缩进文本。这消除了任何不可见的标签和不正确的缩进,加上揭示了任何结构性问题。

答案 3 :(得分:0)

一个未充分利用的功能是html2haml的ERB模式。

html2haml -e < input.html > output.html.haml

使用-e会使你的HAML大约95%,而不是50%使用纯html2haml