-4

我有一个数组,它是从数据库加载的。它采用以下格式:

["aaa:bbb", "ccc:ddd"]

并且需要从数组中构建一个 HTML 定义列表:

<dl>
  <dt>aa</dt>
    <dd>bb</dd>
  <dt>cc</dt>
    <dd>dd</dd>
</dl>

看起来很容易,不是吗?

我想创建一个助手,它将遍历数组,拆分:'s 上的项目,并将它们括在标签中:

<%= 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>
4

1 回答 1

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_tags 构建为:

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

这将首先拆分arrayby的元素:并删除所有在reject_keys数组中找到的元素。然后将结果用于构建content_tags。

于 2013-12-25T16:28:17.543 回答