繁体   English   中英

如何将Ruby哈希火箭转换为有效的JSON?

[英]How to convert Ruby hash rocket into a valid JSON?

我尝试获取这种JSON数据:

[
   {
      "id":3,
      "foods": [{'id':2,'name':'Nasi Minyak','qty':6},{'id':14,'name':'Kuey teow','qty':3}]
   },
   {
      "id":4,
      "foods": [{'id':2,'name':'Nasi Minyak','qty':1},{'id':14,'name':'Kuey teow','qty':1}]
   }
]

请注意,在foods对象的开头和结尾都没有双引号"

我现在所拥有的是这样的:

[
       {
          "id":3,
          "foods": "[{:id=>2, :name=>"Nasi Minyak", :qty=>6}, {:id=>14, :name=>"Kuey teow", :qty=>3}]"
       },
       {
          "id":4,
          "foods": "[{:id=>2, :name=>"Nasi Minyak", :qty=>1}, {:id=>14, :name=>"Kuey teow", :qty=>1}]"
       }
    ]

显然,这是一个字符串,而不是我想要的数组。 这给我带来了问题,因为我需要在我的应用程序的前端(使用Angular构建并使用AJAX / $http发挥很多作用)中使用此JSON数据。

我的控制器内部有这个:

class Api::OrderController < ApplicationController

    # GET /api/orders
    def index
        @orders = Order.all

        render json: @orders
    end

end

这是我的order_serializer文件。

class OrderSerializer < ActiveModel::Serializer
  attributes :id, :foods
end

我试过的

尝试#1

我尝试将订单模型更改为以下形式:

class Order < ActiveRecord::Base
    serialize :foods, Array
end

之后,我尝试使用rails控制台将foodsupdate_attributes

o.update_attributes :foods => [{'id':2,'name':'Nasi Minyak','qty':6},{'id':14,'name':'Kuey teow','qty':3}]

但这对我没有用。 JSON数据仍在哈希火箭中。

尝试#2

我尝试to_json 但是仍然没有用。

如何摆脱双引号"标记并在Rails中正确保存有效的JSON数组?

注意事项

我数据库中的foods列是text 不是string 我相信这与这个问题无关。

我找到了本教程,但看不到方法。

您应该创建一个名为Food的类,再创建一个名为OrderItem的类,然后在Order类中定义一个关系:

has_many :order_items
has_many :food, :through => order_items

这样,您就有两个单独的类:Order和Food,并通过OrderItem类在它们之间创建关系,从而使逻辑保持分离。

每种食物都有其自己的名称和ID,但数量将进入OrderItem表。

尝试这个:

render json: @orders.to_json

如果您的应用是API,请尝试使用active_model_serializers gem。 它返回序列化的模型。

更新:

class OrderSerializer < ActiveModel::Serializer
  attributes :id
  has_many :foods
end

render json: @orders

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM