Mysql结果2d数组到1d Ruby on Rails

时间:2014-11-06 16:06:42

标签: ruby-on-rails ruby arrays multidimensional-array

我有一个返回2d数组的查询,但希望它返回1d数组结果。给出:

sql = "SELECT `id` FROM things WHERE other_id = 8"
ids = ActiveRecord::Base.connection.execute(sql).to_a

ids等于

[[1],[2],[3],[4],[5],[9]....]

我正在使用map来创建一个新数组,但是它的速度非常慢,超过5000条记录。获得以下格式的最快方法是什么:

[1,2,3,4,5,9...]

3 个答案:

答案 0 :(得分:5)

你可以这样做

sql = "SELECT `id` FROM things WHERE other_id = 8"
ids = ActiveRecord::Base.connection.execute(sql).to_a.flatten

更多Rails方式是使用#pluck,如下所示: -

Thing.where(other_id: 8).pluck(:id)

答案 1 :(得分:2)

为什么使用execute声明?使用ActiveRecord模型。

Thing.where(other_id: 8).pluck(:id)
# => [1, 2, 3, 4]

答案 2 :(得分:1)

假设您的模型和关联设置正确,即

class Thing < ActiveRecord::Base
  belongs_to :other
end

class Other < ActiveRecord::Base
  has_many :things
end

您可以使用ids

Thing.where(other_id: 8).ids  #=> [1, 2, 3, 4, 5, 9 ...]

或来自Other

Other.find(8).things.ids      #=> [1, 2, 3, 4, 5, 9 ...]

或:

Other.find(8).thing_ids       #=> [1, 2, 3, 4, 5, 9 ...]