代码之家  ›  专栏  ›  技术社区  ›  Yuval Karmi

将ActiveRecord查询作为变量而不是哈希返回?

  •  4
  • Yuval Karmi  · 技术社区  · 14 年前

    @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
    

    但是有没有一种方法可以首先检索这个结果呢(i、 不经过额外的处理。如果没有,有什么更简洁的方法来处理这个问题?

    非常感谢。

    3 回复  |  直到 14 年前
        1
  •  4
  •   jigfox    14 年前

    尝试:

    @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)
    
        2
  •  1
  •   François Beausoleil    14 年前

    MyModel.connection.select_values("SELECT year FROM my_models")
    

    这将返回一个字符串对象数组。然后您可以使用Ruby工具进行适当的转换。

        3
  •  0
  •   hundredwatt    14 年前

    你可以用 map

    @foo = MyModel.find(:all, :select => 'year').map { |model_object| model_object.year }