ruby-on-rails - 自定义 JSON 输出

标签 ruby-on-rails

在 Controller 中,我有一个这样的 response_with:

respond_with(@layer1 , @layer2)

我需要的 JSON 输出是这样的:
{
   "LayerOne": [
      {
         "name": "haha",
         "number":"44"
      }, // more .... 
   ],
  "LayerTwo": [
     {
        "name": "James Bond",
        "score": 20
     } // , ....
  ]
}

所以为了获得第一部分,我像这样编写序列化程序:
class Layer1Serializer < ActiveModel::Serializer

  attributes :number, :name

  def name
    object.person.name
  end

end

我把 Controller 改成这样,所以我可以传递一个 ROOT,所以它在 J​​SON 中显示为“LayerOne”
respond_with(@Layer1, root: 'LayerOne')

但请记住,一开始我有两件事要传递给 Controller ​​,所以现在我无法弄清楚如何为 JSON 的第二部分“Layer2”执行此操作

最佳答案

您可以创建以下中间类:

class BothLayers
  include ActiveModel
  def initialize(layer1,layer2)
    @layer1 = layer1
    @layer2 = layer2
  end
  attr_accessor :layer1, :layer2
end

和以下序列化程序:
class BothLayersSerializer < ActiveModel::Serializer
  root false
  has_many :layer1, key: "LayerOne"
  has_many :layer2, key: "LayerTwo"
end      

然后在您的 Controller 中:
    both_layers = BothLayers.new(@layer1,@layer2)
    respond_with( both_layers, serializer: BothLayersSerializer )

关于ruby-on-rails - 自定义 JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15398325/

相关文章:

ruby-on-rails - Rails 作业生成器不工作

ruby-on-rails - 将多个 rake 任务合并为一个 rake 任务

ruby-on-rails - 两个独立的 has_many 表

html - 努力查看我的 HTML 输出中的所有数据库条目

ruby-on-rails - Ruby on Rails robots.txt 文件夹

ruby-on-rails - 如何在Rails Active Record查找和.map中使用SQL “IN”语句

ruby-on-rails - Cucumber Rails 3.1 未初始化的常量 ActionController::Dispatcher (NameError)

ruby-on-rails - 在线运行 Rails 代码

ruby-on-rails - rake Assets :precompile aborting, 无法推送到 heroku

jquery - Rails 3.2 显示操作时的模态弹出窗口