Rails中模型字段列表

时间:2013-04-25 06:17:28

标签: ruby-on-rails ruby

我一直在查看Rails文档但无法找到它。

假设我的模型User包含字段strength

如何为数组中的每个模型对象实例获取所有strength的列表?

list_of_str = [1,2,3,4等]。

我知道你可以调用User.all并遍历每个力量字段并将它们附加到列表中但是有更优雅的方法吗?

3 个答案:

答案 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将是一个好主意。