【发布时间】:2015-10-02 03:04:46
【问题描述】:
我尝试获取这种 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
然后我尝试使用这样的 Rails 控制台 update_attributes foods:
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,但我找不到办法。
【问题讨论】:
-
我在这里是否缺少任何用例,因为我没有将
Food作为单独的模型,然后将Order与之关联? -
数据库中的字符串和文本是一样的。一个可能是一个固定长度的字符串,但是一旦它们进入 Ruby,它们仍然是等价的。
-
@Surya 我没有
Food模型。foods数据将从前端推送。Order模型只是保存它,没有任何关联。 -
不
serialize想要JSON或Marshal之类的东西吗?我不确定Array是一个有效的序列化程序。
标签: ruby-on-rails ruby json ruby-on-rails-4 rails-activerecord