我有一个返回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...]
答案 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 ...]