关键词:
【中文标题】如何将 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(&:attributes)
。
这里真的很棒的解决方案,但我的问题可能是 使用 .as_json
、&:serializable_hash
和 &: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【问题描述】:我有多个<div>元素,它们有3个共同点(<h3>、<textarea>、<img>)。单击按... 查看详情
如何将 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系统来管理我网站上的付款。我的网站正在正确接收发送回... 查看详情