我的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
答案 0 :(得分:11)
错误消息中的线索:
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中使用=
显示该字符串。
请注意,您只需要对这些更改进行一次,如果您同时取消这两项更改,则不会显示任何内容。