有没有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人的所有汽车名称的列表。显然我不能做以下事情:
Person.Cars.Name(s)
...但是在 ruby 中是否存在这种性质的东西(或者是否有 ActiveRecord 辅助方法)来处理它?显然我可以遍历所有的汽车并附加到一个数组中,但我想要一些更清洁的东西。有任何想法吗?
最好的。
有没有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人的所有汽车名称的列表。显然我不能做以下事情:
Person.Cars.Name(s)
...但是在 ruby 中是否存在这种性质的东西(或者是否有 ActiveRecord 辅助方法)来处理它?显然我可以遍历所有的汽车并附加到一个数组中,但我想要一些更清洁的东西。有任何想法吗?
最好的。
如果cars
是 a 的关联person
和name
a 的属性car
,则可以执行以下操作:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
甚至(感谢ActiveSupport
和/或 Ruby 1.9):
person.cars.collect(&:name)
更新:这记录在以下地方:
has_many
退货关联代理Array
Array#collect
Symbol#to_proc
inActiveSupport
, 在第二个例子中使用Symbol#to_proc
在 Ruby 1.9 中更新 2:应用格式的示例:
person.cars.collect { |car| "(#{car.name})" }
在较新的 rails 版本(> 3.2.1)中,您可以使用 method pluck
,whitch 是 from 的方法ActiveRecord
,因此它确实比任何顺序数组方法(等)更快地检索map
属性collect
。
在这种情况下,您可以像这样使用:
Person.pluck(:name)
但作为一种ActiveRecord
方法,你只能在 中使用它ActiveRecord::Relation
,而不是在数组中