8

HAML テンプレートのこのヘルパーのどこが間違っていますか?

  def display_event(event)
    event = MultiJson.decode(event)
    markup_class = get_markup_class(event)
    haml_tag :li, :class => markup_class do
      haml_tag :b, "Foo"
      haml_tag :i, "Bar"
    end
  end

これはエラーです:

haml_tag outputs directly to the Haml template.
Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.

テンプレートは次のように display_event を呼び出しています。

 - @events.each do |event|
     = display_event(event)

通常のマークアップを使用していた場合、次のように展開されます

%li.fooclass
   %b Foo
   %i Bar
4

1 に答える 1

12

手がかりはエラーメッセージにあります:

Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.

のドキュメントからhaml_tag

haml_tagバッファに直接出力します。その戻り値は使用しないでください。結果を文字列として取得する必要がある場合は、 を使用します#capture_haml

これを修正するには、Haml を次のように変更します。

- @events.each do |event|
  - display_event(event)

(つまり、 の-代わりに演算子を使用する=)、またはメソッドを使用するように変更しますcapture_haml

def display_event()
  event = MultiJson.decode(event)
  markup_class = get_markup_class(event)
  capture_haml do
    haml_tag :li, :class => markup_class do
      haml_tag :b, "Foo"
      haml_tag :i, "Bar"
    end
  end
end

これにより、メソッドが文字列を返すようになり=、Haml で表示できるようになります。

これらの変更のうち 1 つだけを行う必要があることに注意してください。両方を行うと、互いに打ち消し合い、何も表示されません。

于 2012-05-07T20:59:26.380 に答える