【问题标题】:How to prevent printing variables in view helper? [closed]如何防止在视图助手中打印变量? [关闭]
【发布时间】:2013-12-25 16:16:19
【问题描述】:

我有一个从数据库加载的数组。格式如下:

["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>

【问题讨论】:

  • "aaa:bbb"等中提取"aa""bb"的规则是什么?
  • "aaa" == dt, "bbb" == dd。简单分割:
  • 这不是您的代码显示的内容。

标签: ruby-on-rails ruby arrays ruby-on-rails-4 viewhelper


【解决方案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

然后在你看来拨打&lt;%= build_def_list(array) %&gt;

添加:(过滤要打印的内容)

感谢@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

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

【讨论】:

  • 如何防止全部打印?
  • @ArupRakshit,谢谢。我一开始没有看到。更新了我的答案以包括过滤。
  • 很好的尝试!!非常感谢:)
  • 这段代码打印空dl
  • @br.,抱歉,reject 调用之前缺少大括号。那应该会引发错误。请再试一次。
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多