2

2つのモデルが相互にリンクされており、after_saveを実行しようとしています。モデルで作成し、コードは次のとおりです。

class CustomerBill < ActiveRecord::Base
  after_save :updating_and_creating_ledger_items
  has_many :customer_ledgers, :dependent => :destroy

  def updating_and_creating_ledger_items
    CustomerLedger.create(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
  end
end

顧客元帳モデル

class CustomerLedger < ActiveRecord::Base
  belongs_to :customer_bill,  :foreign_key => "customer_bill_id"
end

ここで問題となるのは、プログラムは完全に実行されますが、値がデータベースに格納されていないことです。カスタマー元帳を確認すると、まだ空です。

値は保存されません。問題であると想定されるのは?この問題に関するガイダンスが役立ちます。

前もって感謝します。:)

4

3 に答える 3

2

追加

  validates_associated :customer_ledgers

customer_bill.rb内

試す

ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
ledger.save

検証を回避するために編集、使用

ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
ledger.save(:validate => false)
于 2012-08-10T04:41:02.200 に答える
0

を設定していないcustomer_bill_idので、次のようcreateに変更createします。build

customer_ledger.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
于 2012-08-10T04:13:41.217 に答える
0

CustomerLedger検証チェックに失敗している可能性があります。交換:

def updating_and_creating_ledger_items
  CustomerLedger.create(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
end

と:

def updating_and_creating_ledger_items
  ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)
  ledger.save(:validate => false)
end
于 2012-08-10T14:19:47.653 に答える