1

我一直在查看 Rails 文档,但找不到这个。

假设我有一个User带有字段的模型strength

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

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

我知道您可以调用User.all并遍历它们的每个强度场并将它们附加到列表中,但是有没有更优雅的方法呢?

4

3 回答 3

3
User.pluck 'strength'

如果我没记错的话,rails 3.2 中的新功能

您可以使用

User.uniq.pluck 'strength'

如果您需要避免重复,您还可以将其与范围和条件结合起来,例如

User.where(...).pluck 'strength'
于 2013-04-25T06:34:19.580 回答
1

您可以为此使用 select 方法,它会生成一个查询,其中仅检索所需字段的值(这比从数据库中加载所有模型数据要快):

User.select(:strength)

这仍然返回一个模型对象数组,因此您必须使用 map 仅获取值数组:

User.select(:strength).map(&:strength)

模型对象的创建将比仅在数据库中查询值要慢,但如果在此位置性能不重要,则应避免使用原始 SQL。

编辑:有一个更好的方法(pluck),请参阅接受的答案。

于 2013-04-25T06:32:38.080 回答
1

如果你真的在 distinct strengths 之后:

User.select('distinct strength').pluck(:strength)

会得到他们。如果您不关心重复,那么 Frederick Cheung 的平原pluck将是一个好主意。

于 2013-04-25T06:44:49.033 回答