Ruby on rails 如何将Ruby hash rocket转换为有效的JSON?
我尝试获取这种JSON数据:Ruby on rails 如何将Ruby hash rocket转换为有效的JSON?,ruby-on-rails,ruby,json,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Ruby,Json,Ruby On Rails 4,Rails Activerecord,我尝试获取这种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}] }
[
{
"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}]
}
]
请注意,食品
对象的开头和结尾没有双引号“
我现在的情况是这样的:
[
{
"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}]"
}
]
class Order < ActiveRecord::Base
serialize :foods, Array
end
o.update_attributes :foods => [{'id':2,'name':'Nasi Minyak','qty':6},{'id':14,'name':'Kuey teow','qty':3}]
显然,这是一个字符串,而不是我想要的数组。这给了我一个问题,因为我需要在我的应用程序前端使用这个JSON数据(使用Angular构建,并经常使用AJAX/$http
)
我的控制器中有一个:
class Api::OrderController < ApplicationController
# GET /api/orders
def index
@orders = Order.all
render json: @orders
end
end
但这对我来说不起作用。JSON数据仍在哈希表中
尝试#2
我试着使用json
,但还是没用
如何去掉双引号“
标记并在Rails中正确保存有效的JSON数组
注意:
我的数据库中的foods
列是text
。不是字符串
。我相信这与这个问题无关
我发现了这一点,但我看不到方法。您应该创建一个名为Food的类和另一个名为OrderItem的类,然后在Order类中定义一个关系:
has_many :order_items
has_many :food, :through => order_items
这样你就有了两个独立的类:Order和Food,通过OrderItem类你在它们之间创建了一个关系,这样你就把逻辑分开了
每种食物都有自己的名称和id,但数量将进入OrderItem表。您应该创建一个名为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\u model\u序列化程序gem。
它返回序列化的模型
更新:
class OrderSerializer < ActiveModel::Serializer
attributes :id
has_many :foods
end
render json: @orders
类OrderSerializer
试试这个:
render json: @orders.to_json
如果您的应用程序是API,请尝试使用active\u model\u序列化程序gem。
它返回序列化的模型
更新:
class OrderSerializer < ActiveModel::Serializer
attributes :id
has_many :foods
end
render json: @orders
类OrderSerializer
我在这里缺少了什么用例,没有将食品作为一个单独的模型,然后将订单
与之关联?数据库中的字符串和文本是相同的。一个可能是一个固定长度的字符串,但一旦它们进入Ruby,它们仍然是等价的。@Surya我没有食物模型。食品
数据将从前端侧推送Order
model只需保存它,而不需要任何关联。是否serialize
需要类似JSON
或Marshall
的内容?我不确定Array
是否是一个有效的序列化程序。我在这里是否缺少任何用例,因为没有将Food
作为一个单独的模型,然后将Order
与之关联?数据库中的字符串和文本是相同的。一个可能是一个固定长度的字符串,但一旦它们进入Ruby,它们仍然是等价的。@Surya我没有食物模型。食品
数据将从前端侧推送Order
model只需保存它,而不需要任何关联。是否serialize
需要类似JSON
或Marshall
的内容?我不确定Array
是否是有效的序列化程序。您能再添加一些吗?还是不明白。如果你也可以共享一些代码,那将非常有帮助。请阅读:如果你以这种方式分离模型,那么在将它们转换为jsonSay时,你应该没有任何工作。我在这个API控制器中添加create
方法,这个create
方法正在接收来自我的前端应用程序的POST
请求参数数据,如[{“id”:2,“name”:“Nasi Minyak”,“qty”:10},{“id”:14,“name”:“Kuey teow”,“qty”:10}]
,如何Order
捕获它并将qty
传递给OrderItem?您可以使用JSON.parse方法解析您正在接收的JSON数据,然后用您需要的信息创建Order和OrderItem对象。您能再添加一些吗?还是不明白。如果你也可以共享一些代码,那将非常有帮助。请阅读:如果你以这种方式分离模型,那么在将它们转换为jsonSay时,你应该没有任何工作。我在这个API控制器中添加create
方法,这个create
方法正在接收来自我的前端应用程序的POST
请求参数数据,如[{“id”:2,“name”:“Nasi Minyak”,“qty”:10},{“id”:14,“name”:“Kuey teow”,“qty”:10}]
,如何Order
捕获它并将qty
传递给OrderItem?您可以使用JSON.parse方法解析您正在接收的JSON数据,然后使用您需要的信息创建Order和OrderItem对象。已经使用到\u json
和活动的\u模型\u序列化程序了。但仍然不起作用。你能把你的OrderSerializer放进去吗?仍然不起作用。它仍然是字符串并且有双引号“
标记。已经使用了到json
和活动的\u model\u序列化程序
。但是仍然没有工作。你能把你的OrderSerializer放进去吗?仍然没有工作。它仍然是字符串并且有双引号”
标记。