有没有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人的所有汽车名称的列表。显然我不能做以下事情:
Person.Cars.Name(s)
...但是在 ruby 中是否存在这种性质的东西(或者是否有 ActiveRecord 辅助方法)来处理它?显然我可以遍历所有的汽车并附加到一个数组中,但我想要一些更清洁的东西。有任何想法吗?
最好的。
有没有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人的所有汽车名称的列表。显然我不能做以下事情:
Person.Cars.Name(s)
...但是在 ruby 中是否存在这种性质的东西(或者是否有 ActiveRecord 辅助方法)来处理它?显然我可以遍历所有的汽车并附加到一个数组中,但我想要一些更清洁的东西。有任何想法吗?
最好的。
如果cars是 a 的关联person和namea 的属性car,则可以执行以下操作:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
甚至(感谢ActiveSupport和/或 Ruby 1.9):
person.cars.collect(&:name)
更新:这记录在以下地方:
has_many退货关联代理ArrayArray#collectSymbol#to_procinActiveSupport , 在第二个例子中使用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,而不是在数组中