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



目前我可以将JSON中的嵌套属性发送到rails中的数据库。在这种情况下,当客户下订单时,"客户"的"id"。我只将一个大型JSON文件中的几个属性保存到rails中的表中。

当前情况

|          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_create_orders.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

注:我几乎可以肯定我在某个地方找到了答案,但由于我的知识水平,我还没能掌握。已经尝试和搜索了大约4个小时。如果有人能根据我的情况为我指明正确的方向,我将不胜感激。

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

  • 您需要在users表中为bigint字段customer_id编制索引。我不知道你现在有什么,只需更改类型或添加索引,或者可能已经可以了
  • user_id字段添加到订单表

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

  • 向用户和订单模型添加关联。订单belongs_to :user,用户has_many :orders
  • 在控制器中找到需要的用户,并将其添加到订单中

    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
    

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

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

before_save :set_customer_id
private
def set_customer_id
self.customer = customer['id']
end

最新更新