Rails:将@cars显示为逗号分隔的列表

8

基于这个查询:

@cars = Car.where("manufacturer_id IN ?", @mfts.select("id")).limit(30).select("id")

我该如何在视图中显示汽车ID,就像这样(或者我需要重新编写查询)?

3,2,5,12,15,24,34,63,64,65,66,85

非常感谢 - 我一直在寻找答案,但没有找到合适的问题/答案。


一个解决方案是执行以下操作:

#view
<% @cars.each do |c| %><%= c.id %>,<% end %>

我不确定是否有更好的方法处理这个问题 - 这显然会在列表末尾留下一个多余的逗号(这并不是致命的问题)。还有更优雅的解决方案吗?

3个回答

30

一行代码:

<%= @cars.map(&:id).join(",") %>

谢谢你的精彩回答!我如何使用数组完成相同的事情?我有一个数组[3,2,5,12,15...],我只需要去掉方括号。 - sscirrus
只需使用 [3,2,5,12,15].join(",") 即可。@cars.map(&:id) 实际上会返回包含 id 的数组。 - PeterWong

8
如果写&:id让人感到困惑,还有另一种方式更易读。如果您要访问一个方法或属性,内联块可能看起来更好一些。
<%= @cars.map { |car| car.id }.join(", ") %>

P.S... map 的另一个名字是 collect,这是在 Smalltalk 中使用的名称。

看起来不错!


6

使用Rails 3.0+,现在您可以编写以下代码:

<%= @cars.map { |car| car.id }.to_sentence %>

Rails会在最后两个元素之间加上注释和单词“and”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接