首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ActiveRecord结果转换为散列数组

如何将ActiveRecord结果转换为散列数组
EN

Stack Overflow用户
提问于 2013-03-15 16:40:27
回答 3查看 124.6K关注 0票数 133

我有一个查找操作的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" }

这样我就可以遍历数组并向散列中添加更多元素,然后将结果转换为JSON以供我的应用程序接口响应使用。我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2013-03-26 03:40:24

as_json

您应该使用as_json方法,该方法将ActiveRecord对象转换为Ruby散列,而不管其名称

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

您还可以使用serializable_hash将任何ActiveRecord对象转换为散列,并且可以使用to_a将任何ActiveRecord结果转换为数组,因此对于您的示例:

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

如果您想要一个丑陋的Rails v2.3之前的解决方案

JSON.parse(tasks_records.to_json) # please don't do it
票数 240
EN

Stack Overflow用户

发布于 2016-07-19 15:36:06

有可能吗?

result.map(&:attributes)

如果您需要symbols键:

result.map { |r| r.attributes.symbolize_keys }
票数 43
EN

Stack Overflow用户

发布于 2016-06-21 03:33:45

对于当前的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"},
      ...
     ]

See the ActiveRecord::Result docs for more info

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15427936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档