我正在尝试编写一个帮助方法,用于输出一组条目,可以通过如下方式调用:
foo_list( ['item_one', link_to( 'item_two', '#' ) ... ] )
在阅读 Rails 3 中使用 helper 输出 HTML 后,我编写了如下的 helper:
def foo_list items
content_tag :ul do
items.collect {|item| content_tag(:li, item)}
end
end
然而,如果我以此作为测试:
在这种情况下,我只会得到一个空的UL。
def foo_list items
content_tag :ul do
content_tag(:li, 'foo')
end
end
我得到了预期的无序列表和列表项。
我尝试过一些调整,如:
def foo_list items
contents = items.map {|item| content_tag(:li, item)}
content_tag( :ul, contents )
end
在这种情况下,我得到了整个列表,但是LI标记是HTML转义的(即使字符串是安全的HTML)。使用content_tag(:ul, contents.join("\n").html_safe )
可以解决问题,但感觉不太对,我认为content_tag
应该以某种方式以块模式与集合一起使用。
concat
的解释:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-concat。该方法在视图上下文中被调用(我认为)。你可能把它和`String#concat`搞混了。 - zetetic