如何检索关系/集合的特定属性?

时间:2009-07-05 23:15:43

标签: ruby-on-rails ruby attributes collections relationship

是否有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人车的所有名字的列表。显然我不能做到以下几点:

Person.Cars.Name(S)

...但是在ruby(或者有一个ActiveRecord帮助方法)中是否存在这种性质的东西来处理它?显然我可以迭代所有的汽车并附加到一个阵列,但我想要一些更清洁的东西。有什么想法吗?

最佳。

2 个答案:

答案 0 :(得分:9)

如果carspersonname car属性的关联,那么您可以执行以下操作:

# person = Person.find(conditions)
person.cars.collect { |car| car.name }

甚至(感谢ActiveSupport和/或Ruby 1.9):

person.cars.collect(&:name)

更新:这在以下地方有记录:

更新2:应用格式的示例:

person.cars.collect { |car| "(#{car.name})" }

答案 1 :(得分:0)

在较新的rails版本(> 3.2.1)中,可以使用方法pluck,whinch是ActiveRecord中的方法,因此它比任何顺序数组方法都更快地检索属性( mapcollect等。

在这种情况下,您可以这样使用: Person.pluck(:name)

但是作为一种ActiveRecord方法,您只能在ActiveRecord::Relation中使用它,而不能在数组中使用