我有一个从数据库加载的数组。它采用以下格式:
["aaa:bbb", "ccc:ddd"]
需要从数组中构建HTML定义列表:
<dl>
<dt>aa</dt>
<dd>bb</dd>
<dt>cc</dt>
<dd>dd</dd>
</dl>
看起来很简单,不是吗?
我想创建一个帮助程序,它将遍历数组,拆分:
上的项目,并将它们包含在标记中:
<%= build_def_list(array) %>
但是,我遇到了一个问题。也就是说,当我从视图中调用Rails助手时,其所有内容都将转到输出。也就是说,当我在函数体内声明一个变量并为其赋值时,该变量立即转到输出。有没有办法抑制函数体内所有东西的打印?
UPD
说真的,如何用帮手做这个?..
<dl>
<% deflist.each do |item| %>
<dt><%= item.split(':').at(0) %>:</dt>
<dd><%= item.split(':').at(1) %></dd>
<% end %>
</dl>
答案 0 :(得分:1)
为你的助手试试这个:
def build_def_list(array)
content_tag :dl do
array.map { |e| e.split(':') }.collect do |dt, dd|
content_tag :dt, dt
content_tag :dd, dd
end
end
end
然后在您的视图中致电<%= build_def_list(array) %>
添加:(过滤要打印的内容)
感谢@Arup提醒我额外检查:
如何防止全部打印?
要仅打印特定项目,您可以首先删除输入数组,删除需要删除的任何元素,然后使用结果数组构建content_tag
s:
def build_def_list(array)
reject_keys = ['ccc']
array = array.map { |e| e.split(':') }.reject { |e| reject_keys.include? e[0] }
content_tag :dl do
array.collect do |dt, dd|
content_tag :dt, dt
content_tag :dd, dd
end
end
end
这将首先将array
的元素拆分为:
,如果在reject_keys
数组中找到它们,则删除所有元素。然后,结果用于构建content_tag
s。