我尝试获取这种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}]"
}
]
显然,它是一个字符串而不是我想要的数组。这给我带来了问题,因为我需要将这个JSON数据用于我的应用程序的前端(使用Angular构建并使用AJAX / $http
进行大量操作)。
我的控制器内有这个:
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
然后我尝试update_attributes
foods
使用rails控制台,如下所示:
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
。我认为这与这个问题无关。
我发现了这个tutorial,但我看不到这样做。
答案 0 :(得分:0)
你应该创建一个名为Food的类和另一个名为OrderItem的类,然后在Order类中你应该定义一个关系:
has_many :order_items
has_many :food, :through => order_items
这样你就有两个独立的类:Order和Food,通过OrderItem类,你可以创建它们之间的关系,这样就可以保持逻辑分离。
每种食物都有自己的名称和ID,但数量会转到OrderItem表。
答案 1 :(得分:0)
试试这个:
render json: @orders.to_json
如果您的应用是API,请尝试使用active_model_serializers
gem。
它返回序列化的模型。
更新:
class OrderSerializer < ActiveModel::Serializer
attributes :id
has_many :foods
end
render json: @orders