我一直在查看Rails文档但无法找到它。
假设我的模型User
包含字段strength
。
如何为数组中的每个模型对象实例获取所有strength
的列表?
list_of_str = [1,2,3,4等]。
我知道你可以调用User.all
并遍历每个力量字段并将它们附加到列表中但是有更优雅的方法吗?
答案 0 :(得分:4)
User.pluck 'strength'
如果我的记忆正确,可以使用rails 3.2中的新功能
您可以使用
User.uniq.pluck 'strength'
如果您需要避免重复,并且您还可以将其与范围和条件相结合,例如
User.where(...).pluck 'strength'
答案 1 :(得分:1)
您可以使用select方法,它会生成一个查询,其中只检索所需字段的值(这比从数据库加载所有模型数据更快):
User.select(:strength)
这仍然会返回一个模型对象数组,因此您必须使用map来获取值的数组:
User.select(:strength).map(&:strength)
创建模型对象比仅查询数据库中的值要慢,但如果性能在这个地方并不重要,则应避免使用原始SQL。
修改:有一种更好的方式(pluck
),请参阅接受的答案。
答案 2 :(得分:1)
如果你真的在strength
之后,那么:
User.select('distinct strength').pluck(:strength)
会得到它们。如果你不关心重复,那么弗雷德里克·张的简单pluck
将是一个好主意。