簡體   English   中英

如何在軌道上的 ruby 中解析嵌套的 hash 序列化?

[英]How to parsed serialize nested hash in ruby on rails?

我有order model 有一個序列化列作為order_details 當我嘗試調用索引操作時,它會在order_details鍵中返回 hash。

我想要訂單的主要 object 中的order_details的所有值。

我的訂單 model 如下:

# models/order.rb
class Order < ActiveRecord::Base
  belongs_to :user
  serialize :order_details
  ....
end

Controller

# controllers/orders_controller.rb
class OrdersController < ApplicationController
  def index
    orders = Order.select('id, user_id, total, order_details')
    render json: orders, status: :ok
  end
end

我收到的 JSON 響應如下:

[{
  "order":{
    "id":1,
    "user_id":1,
    "total": 1000,
    "order_details":{
      "payment_done_by":"credit/debit",
      "transaction_id":"QWERTY12345",
      "discount":210,
      "shipping_address": "This is my sample address"
    }
  },
  {
  "order":{
    "id":2,
    "user_id":2,
    "total": 500,
    "order_details":{
    "payment_done_by":"net banking",
    "transaction_id":"12345QWERTY",
    "discount":100,
    "shipping_address": "This is my sample address 2"
    }
  }
] 

但在這里我需要以下格式的回復

[{
  "order":{
    "id":1,
    "user_id":1,
    "total": 1000,
    "payment_done_by":"credit/debit",
    "transaction_id":"QWERTY12345",
    "discount":210,
    "shipping_address": "This is my sample address"
  },
  {
  "order":{
    "id":2,
    "user_id":2,
    "total": 500,
    "payment_done_by":"net banking",
    "transaction_id":"12345QWERTY",
    "discount":100,
    "shipping_address": "This is my sample address 2"
  }
]

我試圖使用each解析每個響應,但結果可能有數百個用戶 object。

請在這里幫忙。 提前致謝。

克里希納

您應該將as_json添加到您的 Order model 以覆蓋具有相同名稱的現有方法,以滿足您的預期 output

def as_json(options = nil)
  if options.blank? || options&.dig(:custom)
    attrs = attributes.slice("id", "user_id", "total")
    attrs.merge(order_details)
  else
    super
  end
end

然后,在你的 controller

def index
  orders = Order.all
  render json: orders, status: :ok
end

希望有幫助

FYR: https://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM