[英]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控制台将foods
为update_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.