Tôi đang cố gắng một phương pháp helper mà sẽ đưa ra một danh sách các mục, được gọi là như vậy:Vòng & đầu ra content_tags trong content_tag trong helper
foo_list(['item_one', link_to('item_two', '#') ... ])
Tôi đã viết các helper như vậy sau khi đọc Using helpers in rails 3 to output html:
def foo_list items
content_tag :ul do
items.collect {|item| content_tag(:li, item)}
end
end
Tuy nhiên tôi chỉ nhận được một UL trống trong trường hợp đó, nếu tôi làm điều này như một thử nghiệm:
def foo_list items
content_tag :ul do
content_tag(:li, 'foo')
end
end
Tôi nhận được UL & LI như mong đợi.
Tôi đã thử trao đổi nó xung quanh một chút thực hiện:
def foo_list items
contents = items.map {|item| content_tag(:li, item)}
content_tag(:ul, contents)
end
Trong trường hợp đó tôi nhận được toàn bộ danh sách nhưng các thẻ LI là html loại trừ (mặc dù các dây là HTML an toàn). Làm công việc content_tag(:ul, contents.join("\n").html_safe)
nhưng nó cảm thấy sai với tôi và tôi cảm thấy content_tag
nên hoạt động trong chế độ khối với một bộ sưu tập bằng cách nào đó.
Điều đó hoạt động, tôi đã cố gắng làm concat xung quanh việc thu thập, trước đây hơn là trong vòng. Với concat bên trong proc sau đó thu thập là không cần thiết và bạn có thể sử dụng một items.each (hoặc iterators khác). – DEfusion
Bằng cách này bạn đang gọi concat trên mỗi phần tử. Tôi nghĩ rằng sẽ rẻ hơn khi làm items.collect {}. Tham gia ("") html_safe –