我有一个我想要显示的网址/标题对值列表.(更具体地说,每个对象都有自己的链接列表,一些有0,有些有1,有些有更多.)我希望它们出现在逗号分隔的列表中.所以我在.erb文件中写了这个:
<%= links.map{|wl| link_to wl.title, wl.url}.join(', ') %>
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这显示了我想要创建的链接的HTML代码的逗号分隔列表; 也就是说,它采用了所有尖括号和&符号编码.为了确保高阶函数没有任何有趣的东西,我尝试了一个更为迫切的版本:
<% a = [] %>
<% links.each do |wl| %>
<% a << link_to(wl.title, wl.url) %>
<% end %>
<%= a.join(', ') %>
Run Code Online (Sandbox Code Playgroud)
当然,结果相同.但我不认为我在滥用link_to,因为如果我修改它
<% links.each do |wl| %>
<%= link_to(wl.title, wl.url) %>,
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后它实际上创建了链接.它几乎就是我想要的,除了在最后一个之后还有一个额外的逗号.引擎盖下是否有一些魔法可以link_to根据其输出的前进方式采取不同的行动?有没有办法绕过那个魔法?该join语义是什么我想在这里,我可以明显地弄清楚如何推出自己的(使用each_index,我猜),但它似乎是一个非常沉重的和未红宝石解决什么必须是一个常见的问题.
我正在将带有链接的无序列表传输到带有链接的逗号分隔列表。我可以使逗号分隔列表很好......但我无法弄清楚如何将链接放入逗号分隔列表中。
前
ul.list-unstyled
- @cats.each do |c|
= link_to animal_path(id: c.id)
li
=c.breed
Run Code Online (Sandbox Code Playgroud)
后
= @cats.each.map{ |c| c.breed }.join(", ")
Run Code Online (Sandbox Code Playgroud)
这就是我迷失的地方。