Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:获取嵌套的JSON并只将值发送到数据库_Ruby On Rails_Database - Fatal编程技术网

Ruby on rails Rails:获取嵌套的JSON并只将值发送到数据库

Ruby on rails Rails:获取嵌套的JSON并只将值发送到数据库,ruby-on-rails,database,Ruby On Rails,Database,目前,我能够将一个嵌套属性从JSON发送到rails中的数据库。在这种情况下,当客户下订单时,“客户”将显示其“id”。我只是将一些属性从一个大JSON文件保存到rails中的一个表中 当前情况 | customer | +----------------------------+ | {"id"=>115310627314723954} | | {"id"=>115310627314723954} | | {"id"=>1153106273

目前,我能够将一个嵌套属性从JSON发送到rails中的数据库。在这种情况下,当客户下订单时,“客户”将显示其“id”。我只是将一些属性从一个大JSON文件保存到rails中的一个表中

当前情况

|          customer          |
+----------------------------+
| {"id"=>115310627314723954} |
| {"id"=>115310627314723954} |
| {"id"=>115310627314723954} |
|      customer      |
+--------------------+
| 115310627314723954 |
| 115310627314723954 |
| 115310627314723954 |
所需情况

|          customer          |
+----------------------------+
| {"id"=>115310627314723954} |
| {"id"=>115310627314723954} |
| {"id"=>115310627314723954} |
|      customer      |
+--------------------+
| 115310627314723954 |
| 115310627314723954 |
| 115310627314723954 |
来自webhook的简写JSON

{
"id": 820982911946154508,
"email": "jon@doe.ca",
"total_price": "403.00",
"subtotal_price": "393.00",
"customer": {
  "id": 115310627314723954,
  "email": "john@test.com",
  "accepts_marketing": false,
 }
}
缩短的控制器

def order_params
  params.permit(
    :total_price,
    :currency,
    customer: :id
  )
end
缩短了20181202165620\u创建订单。rb

class CreateOrders < ActiveRecord::Migration[5.2]
  def change
    create_table :orders, {id: false} do |t|
      t.float :total_price
      t.string :customer

      t.timestamps
    end
  end
end
class CreateOrders
注:
我几乎可以肯定我在什么地方找到了答案,但由于我的知识水平,我还不能掌握它。我已经试了4个小时了。如果有人能根据我的情况为我指出正确的方向,我们将不胜感激。

在您的订单模型中,添加以下代码:

before_save :set_customer_id

private

def set_customer_id
    self.customer = customer['id']
end

在订单模型中,添加以下代码:

before_save :set_customer_id

private

def set_customer_id
    self.customer = customer['id']
end

如果我理解正确,您不能从webhook更改JSON结构,这是来自某个外部API的请求?您的应用程序中的每个用户都有外部
customer\u id
,您想在订单和使用它的用户之间创建关联吗?让我们试试这样的方法:

  • 用户表中需要有索引的bigint字段
    customer\u id
    。我不知道你现在有什么,只是改变类型或添加索引,或者可能已经可以了
  • user\u id
    字段添加到订单表

    add_reference :orders, :user, foreign_key: true
    
  • 从订单表中删除字符串
    customer
    字段

  • add_reference :orders, :user, foreign_key: true
    
  • 向用户和订单模型添加关联。订单
    属于:用户
    ,用户
    拥有多个:订单
  • 在控制器中找到所需的用户并将其添加到订单中

    def create
      user = User.find_by(customer_id: params[:customer][:id])
      @order = Order.new(order_params)
      @order.user_id = user.id
      if @order.save
        # success story goes here
      else
        # some redirect or re-render logic
      end
    end
    
    def order_params
      params.permit(:total_price, :currency)
    end
    

如果您有任何进一步的问题或澄清,请随意添加评论

如果我理解正确,您不能从webhook更改JSON结构,这是来自某个外部API的请求?您的应用程序中的每个用户都有外部
customer\u id
,您想在订单和使用它的用户之间创建关联吗?让我们试试这样的方法:

  • 用户表中需要有索引的bigint字段
    customer\u id
    。我不知道你现在有什么,只是改变类型或添加索引,或者可能已经可以了
  • user\u id
    字段添加到订单表

    add_reference :orders, :user, foreign_key: true
    
  • 从订单表中删除字符串
    customer
    字段

  • add_reference :orders, :user, foreign_key: true
    
  • 向用户和订单模型添加关联。订单
    属于:用户
    ,用户
    拥有多个:订单
  • 在控制器中找到所需的用户并将其添加到订单中

    def create
      user = User.find_by(customer_id: params[:customer][:id])
      @order = Order.new(order_params)
      @order.user_id = user.id
      if @order.save
        # success story goes here
      else
        # some redirect or re-render logic
      end
    end
    
    def order_params
      params.permit(:total_price, :currency)
    end
    

如果您有任何进一步的问题或澄清,请随时添加评论

您是否有单独的客户模型,或者您只是将客户id作为字符串保存到订单实例中?你能在问题中添加相关的控制器操作吗?@Vasilisa,我有一个用户模型和一个订单模型。但我想将它们与外键匹配(如果我说的是无意义的,请纠正我,这对Rails来说还是很陌生)。因此,我需要订购的客户id与用户的客户id相匹配。但是在我的用户表中,它打印值,在订单表中,它打印上面提到的“当前情况”。您是否有单独的客户模型,或者您只是将客户id作为字符串保存到订单实例中?你能在问题中添加相关的控制器操作吗?@Vasilisa,我有一个用户模型和一个订单模型。但我想将它们与外键匹配(如果我说的是无意义的,请纠正我,这对Rails来说还是很陌生)。因此,我需要订购的客户id与用户的客户id相匹配。但是在我的用户表中,它打印了值,在订单表中,它打印了上面提到的“当前情况”。这并没有解决我的问题,但我做了更新投票,因为它将
{“id”=>115310627314723954}
更改为
id
。明天我将再次深入研究代码,我将进一步研究您的解决方案!谢谢你!没有解决我的问题,但我确实进行了升级,因为它将
{“id”=>115310627314723954}
更改为
id
。明天我将再次深入研究代码,我将进一步研究您的解决方案!谢谢你!首先,非常感谢!我想我成功了。当我执行“User.last.orders”时,我得到了期望的结果(在Rails irb控制台中)。我想这证实了它的作用。一旦我对此有了更多的把握,我会用最终的解决方案更新帖子!很高兴帮助你:)首先,非常感谢!我想我成功了。当我执行“User.last.orders”时,我得到了期望的结果(在Rails irb控制台中)。我想这证实了它的作用。一旦我对此有了更多的把握,我会用最终的解决方案更新帖子!很高兴帮助你:)