我是一名java和Js开发人员,所以我对rails和ruby完全陌生。在我的一个项目中,我使用rails来消费api并返回到js。我正在将api响应转换为ruby中的模型。
现在的格式是{KEY1=>[{array of objects(my model)}], KEY2=>[{array of objects(my model)}]}
model的键在snake_case中。我的要求是循环遍历它,并将其转换为使用驼峰大小写键的JSON。
转换为模型后的Api响应:{ KEY1=>[{@person_name:"abc", @person_id="123"}],KEY2:[{@personName:"bca", @person_id="231"}] }
期望输出:{ KEY1:[{personName:"abc", personId:"123"}],KEY2:[{personName:"bca",personId:"231"}] }
我尝试使用。map和。transform_values直到现在,但不知道我在哪里做错了。
任何帮助都是感激的。
您可以添加以下ApplicationRecord
类:
class ApplicationRecord < ActiveRecord::Base
def serializable_hash(options = {})
hash = super
return hash unless options[:camelize]
hash.deep_transform_keys { |key| key.to_s.camelize(options[:camelize]) }
end
end
这将允许你对几乎任何对象调用to_json(camelize: :lower)
:
{
KEY1: Person.where(...),
KEY2: Person.where(...),
}.to_json(camelize: :lower)
自动序列化整个集合
你可以这样做:
{
KEY1: Person.where(...).select(:name, :id).map { |p| Hash[p.serializable_hash.map { |key, value| ["#{p.model_name.name.downcase}#{key.capitalize}", value] }] },
KEY2: Person.where(...).select(:name, :id).map { |p| Hash[p.serializable_hash.map { |key, value| ["#{p.model_name.name.downcase}#{key.capitalize}", value] }] }
}.to_json