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

ssc*_*rus 8 activerecord ruby-on-rails ruby-on-rails-3

基于此查询:

@cars = Car.where("manufacturer_id IN ?", @mfts.select("id")).limit(30).select("id")
Run Code Online (Sandbox Code Playgroud)

如何在视图中显示汽车的ID(或者我是否需要重写查询)?

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

非常感谢 - 我已经找到了这个,但找不到合适的问题/答案.


一种解决方案是:

#view
<% @cars.each do |c| %><%= c.id %>,<% end %>
Run Code Online (Sandbox Code Playgroud)

我不知道是否有更好的方法去做 - 这显然在列表的末尾留下了一个流浪逗号(这不是一个破坏者).更优雅的解决方案?

Pet*_*ong 30

一条线:

<%= @cars.map(&:id).join(",") %>
Run Code Online (Sandbox Code Playgroud)


php*_*ils 8

如果写作&:id看起来很混乱,那么另一种方式更具可读性.如果你们都想要访问一个方法或属性,那么内联一个块可能会更好看.

<%= @cars.map { |car| car.id }.join(", ") %>
Run Code Online (Sandbox Code Playgroud)

PS ..另一个名字mapcollect..这就是它在Smalltalk中所称的.

看起来不错!


小智 5

使用Rails 3.0+,你现在可以写:

<%= @cars.map { |car| car.id }.to_sentence %>
Run Code Online (Sandbox Code Playgroud)

Rails会在最后两个元素之间适当地添加注释和单词"and".