Ruby on rails 如何将Ruby hash rocket转换为有效的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}] }

我尝试获取这种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}]"
       }
    ]
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放进去吗?仍然没有工作。它仍然是字符串并且有双引号
标记。