All,

I posted this over on comp.lang.ruby, but realized I should probably
keep Rails questions to this group, so soory for the cross-post.

I have a rails app with a Transaction class that has_many :entries.
Each Transaction has many entries, and those with the debit attribute
true are debits, false are credits.  It starts like this.

class Transaction < ActiveRecord::Base
  has_many :entries
  has_many :debits, :class_name => 'Entry', :conditions => {:debit =>
true}
  has_many :credits, :class_name => 'Entry', :conditions => {:debit =>
false}
end

I want to be able to complete an Transaction if there is exactly one
Entry that has its amount set to nil.  I want to set that amount to a
debit or credit of the proper amount to make the Transaction balance.

Sounded easy to me, but I am having trouble with my balance! method.
The relevant part of it is:

  def balance!
    ...
    if num_nils == 1
      # Set the sole nil entry to amount needed to balance Transaction
      plug = debit_total - credit_total
      entries.where(:amount => nil).each do |e|
        e.amount = plug.abs
        e.debit = (plug < 0)
        e.save
      end
    end

The problem is that when I finish this, the entries associated with my
Transaction are not affected.  I appears to make a copy, change it,
and
leave the Entry associated with my Transaction with a nil amount.

What am I missing?

Thanks,

Dan Doherty

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to