如何将 ActiveRecord 结果转换为哈希数组

我有一个查找操作的 ActiveRecord 结果:

tasks_records = TaskStoreStatus.find(
:all,
:select => "task_id, store_name, store_region",
:conditions => ["task_status = ? and store_id = ?", "f", store_id]
)

现在我想把这个结果转换成这样的散列数组:

[0] ->  { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }


[1] -> { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }


[2] ->  { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }

这样我就能够遍历数组并向散列中添加更多的元素,然后将结果转换为用于 API 响应的 JSON。我怎么能这么做?

137160 次浏览

就像 Json 一样

您应该使用 as_json方法,该方法不管 ActiveRecord 对象的名称如何,都将其转换为 RubyHash

tasks_records = TaskStoreStatus.all
tasks_records = tasks_records.as_json


# You can now add new records and return the result as json by calling `to_json`


tasks_records << TaskStoreStatus.last.as_json
tasks_records << { :task_id => 10, :store_name => "Koramanagala", :store_region => "India" }
tasks_records.to_json

序列化 _ 散列

您还可以使用 serializable_hash将任何 ActiveRecord 对象转换为 Hash,并且可以使用 to_a将任何 ActiveRecord 结果转换为 Array,所以举个例子:

tasks_records = TaskStoreStatus.all
tasks_records.to_a.map(&:serializable_hash)

如果您希望在2.3版之前为 Rails 提供一个丑陋的解决方案

JSON.parse(tasks_records.to_json) # please don't do it

对于当前的 ActiveRecord (4.2.4 +) ,在 Result对象上有一个返回哈希数组的方法 to_hash。然后,您可以在它上面映射并转换为符号化的散列:

# Get an array of hashes representing the result (column => value):
result.to_hash
# => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
{"id" => 2, "title" => "title_2", "body" => "body_2"},
...
]


result.to_hash.map(&:symbolize_keys)
# => [{:id => 1, :title => "title_1", :body => "body_1"},
{:id => 2, :title => "title_2", :body => "body_2"},
...
]

有关更多信息,请参见 ActiveRecord: : Result docs

可能?

result.map(&:attributes)

如果你需要符号键:

result.map { |r| r.attributes.symbolize_keys }

试试这个:-

数据 = Model _ name. < em > 最后

属性