2

Invoice と Shipment の 2 つのモデルがあります。請求書には_多くの出荷があり、出荷は請求書に属します.

これが私がやろうとしていることです。

新しい出荷を作成します。

new_shipment = Shipment.create! (params)

この出荷の契約に対する請求書がすでに存在するかどうかを確認してください。

invoice = Invoice.find_by_ref_no(ref_no)

if invoice.nil?
    invoice.shipments << new_shipment
    invoice.save
else
    Invoice.create! (some_params,
                    :shipment_ids => [new_shipment.id],
                    other_params   
                    )
end

出荷を追加した後、請求書を保存する必要があることを知りたいですか? さらに、最初に取得せずに出荷を直接追加するにはどうすればよいですか?

Invoice で :before_save と :after_save を使用して処理を行います。コンソールでは、このようなことを試しました。

Invoice.last.shipments << (Shipment.first)
Invoice.last.shipments.count

そしてカウントが増えました。しかし、請求書を明示的に保存しない場合、:before_save と :after_save が実行されるかどうかはわかりません。

ここでは、Excel ファイルから大きなデータをインポートしているので、請求書を 2 回保存しないようにしたいと考えています。

4

2 に答える 2

5

次のコード行を実行すると、請求書と出荷の関連付けが保存されます。

invoice.shipments << new_shipment

ただし、 before_save および after_save コールバックは、実行するまでトリガーされません。

invoice.save

割り当てる前に、まず貨物を取得する必要があると思います。それを回避する方法はないと思います。

于 2013-08-19T09:54:22.373 に答える