Rails - Почему HAML показывает полный хэш?

Посмотреть:

!!!
%html
  %head
    %title= full_title(yield(:title))
    =stylesheet_link_tag    "application", media: "all"
    =javascript_include_tag "application"
    =csrf_meta_tags
    =render 'layouts/shim'
  %body
    =render 'layouts/header'
    .container
      =flash.each do |key, value|
        %div{class: "alert alert-#{key}"} #{value}

контроллер

def create
  @user = User.new(params[:user])
  if @user.save
    flash[:success] = "This is Correct"
    redirect_to @user
  else
    flash[:wrong] = "no"
    render 'new'
  end
end

Независимо от флеш-памяти (:success или: неправильно или иначе) он всегда компилирует весь хэш в виде html (ниже)

Выход:

<!DOCTYPE html>
…
    <div class='container'>
            <div class='alert alert-wrong'>no</div>
{:wrong=&gt;&quot;no&quot;}
    </div>
  </body>
</html>

Я не имею понятия почему {:wrong=&gt;&quot;no&quot;} отображается Я смотрел на этот терминал часами. Интересно то, что хеш выводится с container идентификатор, но не в alert учебный класс. Это похоже на проблему с отступами, но я прошел несколько перестановок, но безуспешно.

1 ответ

Решение

Вам нужно использовать - а не = когда вы звоните each блок:

-flash.each do |key, value|
  %div{class: "alert alert-#{key}"} #{value}

Из документов:

Также возможно встраивать код Ruby в документы Haml. Знак равенства, =, выведет результат кода. Дефис, -, запустит код, но не выведет результат.

Итак, вы видите хэш, потому что = выведет результат each блок (сам хеш, т.е. {:wrong=>"no"}).

Другие вопросы по тегам