Ruby on rails Rails:获取嵌套的JSON并只将值发送到数据库
目前,我能够将一个嵌套属性从JSON发送到rails中的数据库。在这种情况下,当客户下订单时,“客户”将显示其“id”。我只是将一些属性从一个大JSON文件保存到rails中的一个表中 当前情况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
| 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控制台中)。我想这证实了它的作用。一旦我对此有了更多的把握,我会用最终的解决方案更新帖子!很高兴帮助你:)