在Rails中显示内存位置而不是值

时间:2010-10-31 16:55:51

标签: ruby-on-rails

我的助手中有一段代码:

if !shop.directions.blank?
     "<ul>".html_safe +
        shop.directions.each do |direction|
          "<li>#{direction.direction}</li>".html_safe
        end +
     "</ul>".html_safe
else
    "No directions available.".html_safe
end +

显示direction.direction的内存位置

#<Direction:0xab3c6d0>#<Direction:0xa32c6d0>

而不是像

那样的值
1. Take bus no. 3
2. Take train towards Lydia Ave.

感谢。

更新1

现在我改为:

spot.directions.flatten.map do |direction|
          "<li>".html_safe + direction.direction + "</li>".html_safe
        end

使用flatten.map。但是,它会在浏览器上显示整个代码:

 <li>Take bus no. 3</li><li>Take train towards Lydia Ave.</li>

是的,包括<li><li>

2 个答案:

答案 0 :(得分:0)

这看起来像是在direction.direction中存储Direction对象(没有自定义to_s方法),而不是字符串。尝试输出direction.direction.inspect以更好地了解正在发生的事情。还要记住,通过打印输出值,ruby-debug可以成为一个很好的调试工具。

我的猜测是,在没有查看代码的情况下,您可能会有一组方向对象数组,例如[[direction1],[direction2]]而不是您期望[direction1, direction2]的扁平数组。

更新: Array#map返回另一个数组 - 您要做的是构建一个字符串,而不是返回一个数组,所以要么考虑显式构建字符串,要么调用join结果数组。

答案 1 :(得分:0)

您的块似乎没问题,您是否检查了Direction#direction返回的对象类型?如果它返回一个Direction对象,那么这正是你得到的。

回答您的更新:任何组合/重建的字符串都会丢失其“html safe”状态,并在输出中进行转义。您应该在最终结果上调用html_safe,并在块内,使用h(risky_part)

手动删除有风险的字符串