Ruby on Rails自定义帮助器输出HTML嵌套列表
问题描述:
在标题中我试图创建这样做的帮手,但我很挣扎。我得到错误或干脆为空列表如下: Ruby on Rails自定义帮助器输出HTML嵌套列表
我要实现这一点: 有得多逻辑简单地把这个代码视图。结果是散列,其中键是网站ID,值是书签ID数组或书签ID。
我的代码:
module WebsitesHelper
def present_search_results(results)
content_tag(:ul, class: "websites-list") do
results.each do |key, value|
website = Website.find(key)
concat(content_tag(:li, website.url, class: "website-#{key}") do
bookmarks = website.bookmarks.select do |b|
if value.is_a?(Array)
value.include?(b.id)
else
value = b.id
end
end
content_tag(:ul, nil, id: "website-#{key}") do
bookmarks.each do |b|
content_tag(:li, b.title)
end
end
end)
end
end
end
end
答
如果你想坚持的帮手,那么这样的事情能够帮助:
def present_search_results(results)
content_tag(:ul, class: "websites-list") do
results.map do |website_id, bookmarks|
bookmarks = [bookmarks] unless bookmarks.is_a?(Array)
content_tag(:li, class: "website-#{website_id}") do
website = Website.find(website_id)
concat(website.url)
concat(
content_tag(:ul, class: "bookmarks-list") do
bookmarks.map do |bookmark_id|
bookmark = Bookmark.find(bookmark_id)
content_tag(:li, bookmark.title)
end.reduce(:+)
end
)
end
end.reduce(:+)
end
end
但是,在我看来,该代码是不容易阅读,所以你可以使用纯html
代替,就像这样:
def present_search_results(results)
list = "<ul class='websites-list'>"
results.each do |(website_id, bookmarks)|
bookmarks = [bookmarks] unless bookmarks.is_a?(Array)
website = Website.find(website_id)
list += "<li class='website-#{website_id}'>#{website}"
list += "<ul class='bookmarks-list'>"
bookmarks.each do |bookmark_id|
bookmark = Bookmark.find(bookmark_id)
list += "<li>#{bookmark.title}</li>"
end
list += "</ul></li>"
end
list += "</ul>"
list.html_safe
end
我喜欢这个更好的,因为我更容易阅读。但是都输出你想要的列表。
你能提供一个你想要的嵌套列表的例子吗? – Gerry
我刚刚添加了一张显示我想要实现的图片。我把所有的代码放在视图中,但我真的想使用助手。 – Gregg
因此,你想要显示散列中的书签或属于每个网站(“模型”关联)或两者(即在散列中并属于网站)的书签? – Gerry