是否有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人车的所有名字的列表。显然我不能做到以下几点:
Person.Cars.Name(S)
...但是在ruby(或者有一个ActiveRecord帮助方法)中是否存在这种性质的东西来处理它?显然我可以迭代所有的汽车并附加到一个阵列,但我想要一些更清洁的东西。有什么想法吗?
最佳。
答案 0 :(得分:9)
如果cars
是person
和name
car
属性的关联,那么您可以执行以下操作:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
甚至(感谢ActiveSupport
和/或Ruby 1.9):
person.cars.collect(&:name)
更新:这在以下地方有记录:
has_many
returns Array
Array#collect
Symbol#to_proc
in ActiveSupport
,在第二个例子中使用Symbol#to_proc
in Ruby 1.9 更新2:应用格式的示例:
person.cars.collect { |car| "(#{car.name})" }
答案 1 :(得分:0)
在较新的rails版本(> 3.2.1)中,可以使用方法pluck
,whinch是ActiveRecord
中的方法,因此它比任何顺序数组方法都更快地检索属性( map
,collect
等。
在这种情况下,您可以这样使用:
Person.pluck(:name)
但是作为一种ActiveRecord
方法,您只能在ActiveRecord::Relation
中使用它,而不能在数组中使用