代码之家  ›  专栏  ›  技术社区  ›  Cannon Moyer

在联接表-Rails中保存值

  •  1
  • Cannon Moyer  · 技术社区  · 6 年前

    我正在尝试将amount值添加到联接表中。以下是我的模特:

    class Invoice
        has_many :invoice_payments
        has_many :payments, through: :invoice_payments
    end
    
    class InvoicePayment
        belongs_to :invoice
        belongs_to :payment
    end
    
    class Payment
        has_many :invoice_payments
        has_many :invoices, through: :invoice_payments 
    end
    

    我想联系 N 单笔付款的发票数。对于每一张发票,我想在join表中保存正在支付的金额。

    这是我的控制器代码:

     payment = Payment.new
      if params.has_key?(:invoices)
        params[:invoices].each do |i|
    
    
            invoice = Invoice.find(i[:id])
            invoice.amount_paid = calculate_amount_paid
    
    
           payment.invoices << invoice
        end
      end
    

    如您所见,我不知道如何在InvoicePayment表上设置金额。该字段在此表上不存在。提前谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Arup Rakshit    6 年前

    为每个发票创建一个新的发票付款对象,并将其保存在一个数组中以附加付款。

    payment = Payment.new
    
    if params.has_key?(:invoices)
    
      invoice_payments = params[:invoices].map do |i|
        invoice = Invoice.find(i[:id])
        InvoicePayment.new(invoice: invoice, amount_paid: calculate_amount_paid)
      end
    
      payment.invoice_payments << invoice_payments
    end
    
        2
  •  0
  •   Manjunath P    6 年前

    首先,创建 Payment 记录,然后插入 InvoicePayment

    payment = Payment.create(payment_params)
    if params.has_key?(:invoices)
      params[:invoices].each do |i|
        InvoicePayment.create(invoice_id: i[:id], payment: payment, amount_paid: calculate_amount_paid)
      end
    end