2012-05-07 7 views
7

私のHAMLテンプレートでこのヘルパーに何が間違っていますか?haml_tagが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 
に展開されます

答えて

10

ヒントのヒントRメッセージ:haml_tagのためのドキュメントから

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

haml_tag outputs directly to the buffer; its return value should not be used. If you need to get the results as a string, use #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つだけがになるようにする必要があります。両方を行うとキャンセルされ、何も表示されません。

関連する問題