[英]"Correct" way to create relations from a request in rails?
对控制器的示例发布请求:
{
"card": 1,
"cardPot": 6,
"purchases": [
{
"description": "groceries",
"amount": "40.60",
"transaction_date": "17/02/2022",
"statement_reference": "10076608",
"statement_description": "SAINSBURYS ",
"reimbursements": [
{
"amount": "19.00",
"pot": 3
},
{
"amount": "21.60",
"pot": 7
},
],
"spread": false
},
....
]
}
采购有很多报销,报销属于采购...
在我的控制器中,我正在做:
def import
card_id = params[:card]
card = CreditCard.find_by(id: card_id)
pay_to_pot = params[:cardPot]
purchases = params[:purchases]
purchases.each do |p|
purchase_params = p.permit(:description, :amount, :transaction_date, :statement_reference, :statement_description).merge({user_id: 1, credit_card_id: card_id})
new_purchase = Purchase.create(purchase_params)
p[:reimbursements].each do |r|
start_date = p[:start_date] || Date.today
instalments = p[:spread] ? card.free_months_remaining : 1
Reimbursement.create({purchase_id: new_purchase.id, instalments: instalments, user_id: 1, pay_to_pot_id: pay_to_pot, pay_from_pot_id: r[:pot], total_amount: p[:amount], start_date: start_date })
end
end
end
这得到了预期的效果,但感觉我可以更有效地做到这一点,和/或这不是标准约定。 我可以创建所有购买实体而不需要执行each
,但是我需要一些方法来创建报销并将它们链接到购买 ID
注意:显然user_id: 1
不会投入生产! 只是入门时的方便。
您可以使用Active Record 嵌套属性,它应该创建关联关系。
同样对于请求中不存在的自定义参数,您可以在相应模型上添加保存前回调并设置值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.