目前我可以将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