我一直在查看 Rails 文档,但找不到这个。
假设我有一个User
带有字段的模型strength
。
如何获取strength
数组中模型对象的每个实例的所有 s 列表?
list_of_str = [1, 2, 3, 4, 等等..]
我知道您可以调用User.all
并遍历它们的每个强度场并将它们附加到列表中,但是有没有更优雅的方法呢?
我一直在查看 Rails 文档,但找不到这个。
假设我有一个User
带有字段的模型strength
。
如何获取strength
数组中模型对象的每个实例的所有 s 列表?
list_of_str = [1, 2, 3, 4, 等等..]
我知道您可以调用User.all
并遍历它们的每个强度场并将它们附加到列表中,但是有没有更优雅的方法呢?
User.pluck 'strength'
如果我没记错的话,rails 3.2 中的新功能
您可以使用
User.uniq.pluck 'strength'
如果您需要避免重复,您还可以将其与范围和条件结合起来,例如
User.where(...).pluck 'strength'
您可以为此使用 select 方法,它会生成一个查询,其中仅检索所需字段的值(这比从数据库中加载所有模型数据要快):
User.select(:strength)
这仍然返回一个模型对象数组,因此您必须使用 map 仅获取值数组:
User.select(:strength).map(&:strength)
模型对象的创建将比仅在数据库中查询值要慢,但如果在此位置性能不重要,则应避免使用原始 SQL。
编辑:有一个更好的方法(pluck
),请参阅接受的答案。
如果你真的在 distinct strength
s 之后:
User.select('distinct strength').pluck(:strength)
会得到他们。如果您不关心重复,那么 Frederick Cheung 的平原pluck
将是一个好主意。