如何获取 ActiveRecords 的集合以序列化为具有单个根元素的 JSON 对象,该根元素包含 colletions 元素的数组?
我们刚刚从 Rails 3.0.10 升级到 Rails 3.2,在将 ActiveRecord 对象的集合序列化为 JSON 的方式上遇到了问题。
我已经阅读并知道使用to_json
我们现在的方式可能是一个坏主意,我们会尽快解决这个问题,但在此期间,我正在寻找可能修复我的代码的最快方法,所以它确实由于这些更改破坏了我们的 API,它之前做了什么。
我们有一个 Form 类型的 ActiveRecord 对象集合,这些对象在“索引”操作中作为 JSON 使用以下代码返回:
def index # in our FormsController
# get our "records" collection from the database
respond_to do |format|
yield(format) if block_given?
# other formats excluded for simplicity
format.json {
records = records.call if records.is_a?(Proc)
render :json => records.to_json(serialize_records_options), :layout => false
}
end
end
# These are in ApplicationController
def serialize_options
(self.class.serialize_options if self.class.respond_to? :serialize_options) || {}
end
def serialize_records_options
options = serialize_options.clone
options[:root] = (options[:root].pluralize if options[:root]) || controller_name
options[:indent] ||= 2
options
end
问题是这曾经序列化为:
{
"total_entries": 2,
"total_pages": 1,
"forms": [{
"form": {
... attributes ...
}
},
{
"form": {
... attributes ...
}
}],
"per_page": 5,
"current_page": 1
}
现在序列化为:
[{
"forms": {
... attributes of form 1 ...
}
},
{
"forms": {
... attributes of form 2 ...
}
},
{
... more forms ...
}]
我们的客户端应用程序甚至无法将该格式识别为有效的 JSON 对象。关于我们如何让它以原始格式输出的任何想法?除了升级 Rails 及其依赖项外,我们没有更改任何序列化代码。我们的包中有以下 JSON gem:
$ bundle show | grep json
* json (1.7.3)
* jsonpath (0.5.0)
* multi_json (1.3.5)
提前致谢!这是一个奇怪的问题。