Проблемы преобразования Rails HAML - неожиданное kENSURE, ожидающее kEND - PullRequest
5 голосов
/ 09 июня 2009

Я пытаюсь перейти на использование 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

и сессий / 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 ]

13 голосов
/ 09 июня 2009

Это то, что делает хамл, когда вы ошиблись. html2haml выполняет большую часть работы за вас, но вам все еще нужно просмотреть изменения. Проблема в session / new.html.haml в том, что вы запускаете блок do без содержимого:

- form_tag session_path do
%fieldset

Весь набор полей должен быть вложен (с отступом) в этот блок do. Поскольку контента вообще нет, haml не может вставить объявление end, поэтому, когда файл интерпретируется, вы получаете:

unexpected $end, expecting kEND

означает "Я достиг конца файла ($ end), я ожидал ключевое слово end (kEND)"

1 голос
/ 29 сентября 2010

HAML ведет себя очень плохо с такими проблемами, как вкладки вместо пробелов и некорректные отступы.

Мой обходной путь (по крайней мере, в OSX с использованием TextMate) заключается в использовании TextMate, если установлен пакет HAML / SASS . Затем я использую CMD- [для отступа текста, а затем CMD-] для правильного отступа текста. Это избавляет от любых невидимых вкладок и неправильного отступа, а также выявляет любые структурные проблемы.

1 голос
/ 09 июня 2009

Как показано, первый блок имеет% тела с отступом на один уровень больше, чем% head, и% head на том же уровне, что и% html, ни один из которых не является хорошим. Если это работает, вы можете получить что-то вроде

<html>
</html>
<head>
  ...
  <body>
  ...
  </body>
</head>

Я думаю, что большинство браузеров подавятся этим! ; -)

В общем, я не фанат html2haml, который, хотя он старается изо всех сил, кажется, не в состоянии справиться со всем. Если у вас нет действительно большого количества файлов для просмотра, я был бы склонен тратить время на ручную обработку файлов. Вам не нужно делать их все сразу, почему бы просто не перевести их на ходу? Таким образом, вы узнаете намного больше о HAML. Достаточно того, что, надеюсь, вы обнаружите, что все отступы становятся инстинктивными, после чего прогресс начинает ускоряться.

0 голосов
/ 23 декабря 2011

Одной из недостаточно используемых функций является режим ERB html2haml.

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

Простое использование -e позволит получить ваш HAML на 95% пути, а не на 50% с использованием чистого html2haml

...