Для справки, вот определение concat, с которым вы сталкиваетесь при выполнении этого кода (из actionpack / lib / action_view / helpers / tag_helper.rb).
аюсь вспомогательный метод, который выведет список элементов, которые будут вызываться так:
foo_list( ['item_one', link_to( 'item_two', '#' ) ... ] )
Я написал помощник после прочтенияИспользование помощников в рельсах 3 для вывода HTML:
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
Я получаю UL & LI, как и ожидалось.
Я попытался обменять это немного, делая:
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
должен работать в режиме блока с коллекцией как-то.