我正在对模型进行ActiveRecord查找
@foo = MyModel.find(:all, :select => 'year')
如您所见,我只需要年份列,因此我的理想输出将是
["2008", "2009", "2010"]
相反,我得到了一个模型的哈希值,每个模型包含年份,如下:
[#<MyModel year: "2008">, #<MyModel year: "2009">, #<MyModel year: "2010">]
我可以循环使用它,将其转换为我的理想输出:
@years = []
for bar in @foo
@years.push(bar.year)
end
但有没有办法检索此结果? (即没有经过额外的处理?)。如果没有,有什么更简洁的方法来进行这种处理?
谢谢。
答案 0 :(得分:4)
尝试:
@foo = MyModel.find(:all, :select => 'year').map(&:year)
您还可以在结果上调用.uniq()
以删除重复项。
@foo = MyModel.find(:all, :select => 'year').map(&:year).uniq
这是
的缩写形式@foo = MyModel.find(:all, :select => 'year').map{ |model| model.year }
这循环遍历MyModel
数组,并在块(model.year
)中创建一个新的返回值数组。
甚至更短的代码,但首先从db:
调用所有内容@foo = MyModel.all.map(&:year)
答案 1 :(得分:1)
如果您不想实例化模型,您可以这样做:
MyModel.connection.select_values("SELECT year FROM my_models")
这将返回一个String对象数组。然后,您可以根据需要使用Ruby工具进行转换。
答案 2 :(得分:0)
您可以使用map
更改数组中的每个值。例如:
@foo = MyModel.find(:all, :select => 'year').map { |model_object| model_object.year }