1

意見:

!!!
%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または:wrongなど)に関係なく、常にハッシュ全体を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;}表示されているのかわかりません。私はこのターミナルを何時間も見つめてきました。興味深いのは、ハッシュがcontainerIDとともに出力されているが、alertクラスには出力されていないことです。インデントの問題のように感じますが、私はいくつかの順列を通過しましたが、成功しませんでした。

4

1 に答える 1

3

ブロックを呼び出すときは、 a-ではなく aを使用する必要があります。=each

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

ドキュメントから:

Ruby コードを Haml ドキュメントに埋め込むことも可能です。等号 = は、コードの結果を出力します。ハイフン (-) はコードを実行しますが、結果は出力しません。

ブロックの結果(ハッシュ自体、つまり)=を出力するため、ハッシュが表示されます。each{:wrong=>"no"}

于 2012-12-05T05:01:21.493 に答える