我有一个URL/标题对中的值列表,希望显示出来。(更具体地说,每个对象都有自己的链接列表,有些带有0,有些带有1,有些带有更多)我希望它们出现在逗号分隔的列表中。所以我在我的.erb文件中写道:

<%= links.map{|wl| link_to wl.title, wl.url}.join(', ') %>

令我有些惊讶的是,这显示了一个逗号分隔的HTML代码列表,其中列出了我想要创建的链接;也就是说,它包含了所有尖括号和与号,并对它们进行编码。为了确保高阶函数中没有任何有趣的内容,我尝试了一个更为命令式的版本:
<% a = [] %>
<% links.each do |wl| %>
  <% a << link_to(wl.title, wl.url) %>
<% end %>
<%= a.join(', ') %>

当然,结果是一样的。但我不认为我误用了,因为如果我把它修改成
<% links.each do |wl| %>
  <%= link_to(wl.title, wl.url) %>,
<% end %>

然后它实际上创建了链接。这几乎正是我想要的,只不过最后一个后面还有一个逗号。有没有什么神奇的东西会在引擎盖下运行,使它根据输出的方向而有不同的动作?有什么办法可以绕过这个魔法?这里的link_to语义正是我想要的,而且我可以很明显地找到如何滚动自己的(我猜是使用每个索引)但是对于一个常见的问题来说,这似乎是一个非常沉重和非ruby的解决方案。

最佳答案

虽然使用html_safe的建议会得到您想要的结果,但我建议您不要在视图中那样粘贴循环。在rails中,有一种非常好的方法可以满足您的需求:
在当前循环所在的主视图文件中,将其更改为:

<%= render partial: 'links/link', collection: links, spacer_template: 'shared/comma' %>

然后创建一个部分links/_link.html.erb
<%= link_to link.title, link.url %>

然后创建一个部分shared/_comma.html.erb
,

这种方法的好处是,你不必担心你的链接内容是否真的是安全的,如果你选择以另一种方式列出或设置它的样式,那么只需更改一个或两个模板。例如,如果您决定让它垂直,并在间隔模板中使用<br>而不是,,而不是逗号。

关于ruby-on-rails - 我可以在Rails中使用link_to制作一系列链接吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17561050/

10-09 22:07