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

     2023-02-15     270

关键词:

【中文标题】如何将 ActiveRecord 结果转换为哈希数组【英文标题】:How to convert ActiveRecord results into an array of hashes 【发布时间】:2013-03-03 21:41:21 【问题描述】:

我有一个查找操作的 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 以用于我的 API 响应。我该怎么做?

【问题讨论】:

另见***.com/q/20794398/165673 【参考方案1】:

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)

如果你想为 v2.3 之前的 Rails 提供一个丑陋的解决方案

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

【讨论】:

+1 建议 serializable_hash - 这是我第一次遇到提到这一点的答案。遗憾的是,我目前正在使用最后一个 JSON 解决方案,但现在将考虑使用 serializable_hash。我只需要找出如何在每条记录中包含类名,就像在 JSON 中包含 root 一样。 @Dom웃 如果我理解正确,请参阅:***.com/questions/17090891/… @Dom 在下面看到我的回答。 另一种可能的方式是tasks_records = TaskStoreStatus.all.map(&amp;:attributes) 这里真的很棒的解决方案,但我的问题可能是 使用 .as_json&amp;:serializable_hash&amp;:attributes 有什么好处?它与 ActiveRecord 助手有关还是直接与性能有关? 在此先感谢各位! @Dom @Rigo @Fredrik E【参考方案2】:

可能吗?

result.map(&:attributes)

如果你需要符号键:

result.map  |r| r.attributes.symbolize_keys 

【讨论】:

【参考方案3】:

对于当前的 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.

【讨论】:

不能比这更简单明了。非常感谢。 如果您的 ActiveRecord 版本无法识别 to_hash 方法,请注意:请改用 to_ary。奇怪的是,这对我有用。【参考方案4】:

试试这个:-

数据 = 型号名称最后

data.attributes

【讨论】:

如何将 ActiveRecord 模型数组转换为 CSV?

】如何将ActiveRecord模型数组转换为CSV?【英文标题】:HowtoconvertarrayofActiveRecordmodelstoCSV?【发布时间】:2013-10-1214:29:11【问题描述】:我有一组ActiveRecord模型,我希望将其转换为CSV。我尝试研究像FasterCSV这样的gem,但它们似乎只... 查看详情

如何将 DAO 查询转换为 Yii2 ActiveRecord。如何从连接表中选择和使用特定列

】如何将DAO查询转换为Yii2ActiveRecord。如何从连接表中选择和使用特定列【英文标题】:HowtotranslateDAOqueryintoYii2ActiveRecord.Howtoselectandusespecificcolumnsfromjoinedtable【发布时间】:2015-07-3001:29:10【问题描述】:我在我的项目中使用Yii2。... 查看详情

如何将哈希转换为 JavaScript 格式?

】如何将哈希转换为JavaScript格式?【英文标题】:HowcanIconvertahashintoJavaScriptformat?【发布时间】:2017-07-0500:26:13【问题描述】:我有一个哈希:name=>"douglas_hettinger@braunlebsack.io"我正在尝试将此哈希转换为以下JavaScript格式。"name":"d... 查看详情

如何将哈希映射键转换为列表?

】如何将哈希映射键转换为列表?【英文标题】:Howtoconverthashmapkeysintolist?【发布时间】:2015-10-2711:50:58【问题描述】:我有一个哈希映射,我正在尝试将键转换为列表。代码如下:List<ARecord>recs=newArrayList<ARecord>();HashMap... 查看详情

如何将哈希码对象值转换为字符串变量

】如何将哈希码对象值转换为字符串变量【英文标题】:Howtoconvertahashcodeobjectvalueintoastringvariable【发布时间】:2014-07-1106:40:47【问题描述】:我正在尝试将我在logacat文件中收到的哈希码值转换为字符串表示形式。我已经尝试了... 查看详情

如何将 Python 字典转换为 JavaScript 哈希表?

】如何将Python字典转换为JavaScript哈希表?【英文标题】:HowcanIconvertPythondictionarytoJavaScripthashtable?【发布时间】:2012-04-2120:19:44【问题描述】:我已经传递给模板常规Python字典,我需要在里面$(document).ready(function()..将该Python字典... 查看详情

如何将数组组转换为 Json?

】如何将数组组转换为Json?【英文标题】:HowtoconvertgroupofarrayintoJson?【发布时间】:2021-01-1602:26:15【问题描述】:我有多个&lt;div&gt;元素,它们有3个共同点(&lt;h3&gt;、&lt;textarea&gt;、&lt;img&gt;)。单击按... 查看详情

如何将 JSON 转换为 Ruby 哈希

】如何将JSON转换为Ruby哈希【英文标题】:HowtoconvertJSONtoaRubyhash【发布时间】:2011-12-1908:10:46【问题描述】:我有一个JSON对象包含以下值:@value="val":"test","val1":"test1","val2":"test2"我想在Ruby中遍历它以获取键/值对。当我使用@each时... 查看详情

如何将 Ruby 哈希转换为 XML?

】如何将Ruby哈希转换为XML?【英文标题】:HowdoIconvertaRubyhashtoXML?【发布时间】:2010-12-1622:18:43【问题描述】:这是我最终需要的特定XML:<?xmlversion="1.0"encoding="UTF-8"?><customer><email>joe@example.com</email><first_name>... 查看详情

我应该如何将哈希定义为枚举?(代码片段)

我在我的rails项目中使用enumerize,如下所示:classUser<ActiveRecord::BaseextendEnumerizeenumerize:sex,in:male:0,female:1,other:2,,predicates:prefix:false...end现在我想用in:将哈希传递给enumerize,这样我就可以在视图文件中使用值和int的对。(我知道我... 查看详情

如何表示将 ruby​​ 哈希转换为 yaml 的 aws 内部函数

】如何表示将ruby​​哈希转换为yaml的aws内部函数【英文标题】:Howtorepresentawsinternalfunctionstoconvertrubyhashtoyaml【发布时间】:2018-06-1603:35:10【问题描述】:我正在尝试从ruby​​哈希生成AWScloudformationYAML。但我无法弄清楚如何在rub... 查看详情

Rails:如何将对象数组的哈希转换为 json

】Rails:如何将对象数组的哈希转换为json【英文标题】:Rails:Howtoconverthashofarrayofobjectstojson【发布时间】:2021-12-0316:20:18【问题描述】:我是一名java和Js开发人员,所以我对rails和ruby​​完全陌生。在我的一个项目中,我使用rail... 查看详情

MVC 5 - 如何将哈希密码转换为可读文本 [重复]

】MVC5-如何将哈希密码转换为可读文本[重复]【英文标题】:MVC5-Howtoconverthashpasswordtoreadabletext[duplicate]【发布时间】:2014-11-0401:55:58【问题描述】:MVC5>>将哈希密码转换为可读文本。示例:HashPasword=AMVicVYXq/Gnj+gJ9QMThNZt84TJZwCIIUd... 查看详情

如何将密码哈希从 MD5 转换为 SHA?

】如何将密码哈希从MD5转换为SHA?【英文标题】:HowdoIconvertpasswordhashingfromMD5toSHA?【发布时间】:2010-11-2518:29:53【问题描述】:我有一个旧应用程序,它的用户密码使用MD5哈希存储在数据库中。我想用SHA-2系列中的东西替换它。... 查看详情

如何将字符串转换为 html 颜色代码哈希?

】如何将字符串转换为html颜色代码哈希?【英文标题】:HowcanIconvertstringstoanhtmlcolorcodehash?【发布时间】:2011-04-1301:16:14【问题描述】:我想将字符串表示为任意html颜色。例子:“废话”=#FFCC00"foofoo2"=#565656实际的颜色代码是什... 查看详情

该字符串的类型是啥以及如何将其转换为哈希?

】该字符串的类型是啥以及如何将其转换为哈希?【英文标题】:Whatisthetypeofthisstringandhowtoconvertittohash?该字符串的类型是什么以及如何将其转换为哈希?【发布时间】:2021-11-1115:25:28【问题描述】:我将ransack参数从一个页面传... 查看详情

将对象数组转换为 ActiveRecord::Relation

】将对象数组转换为ActiveRecord::Relation【英文标题】:ConvertinganarrayofobjectstoActiveRecord::Relation【发布时间】:2013-06-2406:55:04【问题描述】:我有一个对象数组,我们称之为Indicator。我想在这个数组上运行指标类方法(defself.subjects... 查看详情

您如何将来自 PayPal 的 PDT 响应转换为哈希?

】您如何将来自PayPal的PDT响应转换为哈希?【英文标题】:HowdoyouturnthePDTresponsefromPayPalintoahash?【发布时间】:2017-12-2703:04:30【问题描述】:我正在尝试使用PayPal上的PDT系统来管理我网站上的付款。我的网站正在正确接收发送回... 查看详情