【问题标题】:How do I generate a link within a .map block?如何在 .map 块中生成链接?
【发布时间】:2012-12-18 07:39:10
【问题描述】:

我有这样的电话:

<%= product.categories.map{|cat| cat.name}.join(', ').to_s + "." %>

我想做的事情是这样的:

<%= product.categories.map{|cat| link_to cat.name, category_path(cat)}.join(', ').to_s + "." %>

当我这样做时,它实际上将路径 /categories/1 作为文本吐出,实际上并没有使其成为链接。

如何在此块中生成实际链接?

谢谢。

编辑:有人对如何做到这一点有任何想法吗?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

你可以这样做

<% product.categories.each do |p| %>
 <%= link_to p.name, category_path p %>
<% end %>

更新

不妨这样试试

<% array =  product.categories.collect { |p| raw link_to p.name, category_path p } %>

这应该将所有链接保存在数组中以供进一步使用。现在你可以试试

<%= array.join('., ') %>

未经测试的代码。请注意确定这是否可行。

【讨论】:

  • 我知道,但这对我的格式化没有帮助——这就是我这样做的原因。
  • 即这就是我使用.map 和join 的原因——所以我可以按照我想要的方式格式化输出。我要做的就是添加指向该格式的链接。
  • 你能粘贴你想要的输出吗?
  • 所需输出:&lt;a href="/categories/1"&gt;Men&lt;/a&gt;, &lt;a href="/categories/2"&gt;Women&lt;/a&gt;. 其中Men 和Women 被标识为cat.name。请注意,, 和 . 包含在格式中 - 只要product.categories 超过 1 个对象,就会确定该格式。如果我必须使用一堆if 语句来获得我想要的格式,那将太冗长而且看起来很奇怪。
  • 这绝对看起来应该有效。不过感觉有点不雅。如果我没有得到任何其他建议,那么我将使用这个。只是想要一些更精致的东西。
【解决方案2】:

我需要将整个 map 结果包装在 raw 中,如下所示:

<%= raw(@product.categories.map{ |cat| raw(link_to(cat.name, category_path(cat))) }.join(', ') + ".") %>

如需更完整的答案,请check here。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 2021-10-05
    • 2015-08-04
    • 2010-10-19
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多