我有一个类 class Place < ActiveRecord::Base,之前已经写好了输出成 json 的规则,这个样子的
def as_json_options
@options={}
@options[:except] ||= [:created_at, :updated_at]
@options[:include] ||= {:positions => Position.as_json_options}
@options[:methods] ||= [:guide_info]
end
其中的 Position 是一个这样的东西
{
name : "A1",
tags : ["abc", "xyz"]
}
原来 Place 里包含一个 Position 数组,都是通过 ActiveRecord 映射好的,输出 json 也很正常。 现在需求变了,要求 Place.positions 不是一个数组了,是一个根据 position name 首字母分组的 Hash,类似这样
{
...
positions_ : {
A : [
{ name : "A1", tags : ["abc", "xyz"] },
{ name : "A2", tags : ["abc", "xyz"] },
...
],
B : [
{ name : "B1", tags : ["abc", "xyz"] },
{ name : "B2", tags : ["abc", "xyz"] },
...
],
...
},
...
}
我倒是可以按上述结构构造一个 hash 属性,但我没有办法把这个 hash 按照 as_json 的方式放到输出里,因为他不是 ActiveModel,会报 undefined method `serializable_hash' for #Hash:0x54a4610
我能做到的就是把这个 hash.to_json 当字符串用 @options[:methods] 挂在 json 的一个字段上,但这样 positions_ 里就会有一些不必要的引号,因为 to_json 的时候就带了引号。这样不好。
请问,这该怎么搞? 谢啦先!