Почему этот блок кода haml дает «синтаксическую ошибку, непредвиденное ключевое слово, ожидание $ end» - PullRequest
1 голос
/ 01 декабря 2011
= tabs_tag(:open_tabs => { :id => "menu" }) do |tab| 
  - menu_tabs.each do |menu_tab|
    - if !menu_tab.only_if.nil?
      - if menu_tab.only_if.call
        = tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path, :span => "arrow-down"
          - if !menu_tab.child_elements.blank?
            %ul
            - menu_tab.child_elements.each do |child_tab|
              %li
                =link_to child_tab.display_name, child_tab.path
    - else
      = tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path

Сообщение об ошибке:

app/views/menu_builder/_tab_view.html.haml:15: syntax error, unexpected keyword_else, expecting keyword_end
app/views/menu_builder/_tab_view.html.haml:21: syntax error, unexpected keyword_ensure, expecting $end

(кстати, номера строк тоже неверны, я не знаю, если это плохо)

Я проверилотступ и все должно быть правильно, и это должно соответствовать if! menu_tab.only_if.nil ?, поэтому я не понимаю, почему появляется это сообщение об ошибке.

1 Ответ

3 голосов
/ 01 декабря 2011

Полагаю, это потому, что вы делаете это:

= tabs_tag(:open_tabs => { :id => "menu" }) do |tab| 

и

= tab.send menu_tab.tab_name, menu_tab.display_name, menu_tab.path, :span => "arrow-down"

и затем вложение содержимого в то, что является недопустимым в HAML. Вы получаете ту же ошибку при попытке сделать:

= render :partial => "some/view", :locals => { :local_var => @var }
  - if something
    -# do something

HAML захлебнется этим, поскольку он не знает, как отобразить оператор if в частичном файле (на основе расстояния, расположения оператора if внутри него и т. Д.). То же самое относится и к другим помощникам кода, таким как вкладки, которые вы используете.

...