我的助手中有一段代码:
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>
答案 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)