bharath
bharath

Reputation: 623

after_save error in ruby on rails

I have two models linked to each other and I am trying to do an after_save, create in the model and code is as follows.

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

customer ledger model

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

Now the problem is the program executes perfectly but the value are not been put in the database. If I check Customer ledger it is still empty.

The values are not getting stored. what seems to be the problem? Guidance towards this matter will be helpful.

Thanks in advance. :)

Upvotes: 2

Views: 329

Answers (3)

Salil
Salil

Reputation: 47472

Add

  validates_associated :customer_ledgers

In customer_bill.rb

Try

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

EDITED for to avoid Validations, use

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

Upvotes: 2

Mike
Mike

Reputation: 9842

The CustomerLedger may be failing a validation check. Replace:

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

with:

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

Upvotes: 0

Sam Peacey
Sam Peacey

Reputation: 6034

You're not setting the customer_bill_id in the create, change create to build as so:

customer_ledger.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id)

Upvotes: 0

Related Questions