Dear All,

I want to count a MoneyFlow's amount into a Loan's amount, but a ImmutableError 
happened. Do you know the reason?

class Loan
  include DataMapper::Resource
  belongs_to :loaner, Person, :key => true
  belongs_to :loanee, Person, :key => true
  property :currency, Enum[*CURRENCY_CODES], :key => true
  property :amount, Decimal, :scale => 2, :default => 0
  validates_with_block :if => :new? do
    Loan.get(currency, loanee_id, loaner_id).nil?
  end
  validates_with_block do
    loaner == loanee ? false : true
  end
  def reverse
    self.loaner, self.loanee, self.amount = loanee, loaner, -amount
  end
  def self.count!(money_flow)
    loan = get(money_flow.currency, money_flow.giver_id, money_flow.receiver_id)
    loan.amount += money_flow.amount
  end
  before :save do
    reverse if amount < 0
  end
  extend Forwardable
  def_delegator :loaner, :local_id, :loaner_local_id
  def_delegator :loanee, :local_id, :loanee_local_id
end

class MoneyFlow
  include DataMapper::Resource
  belongs_to :giver, Person
  belongs_to :receiver, Person
  has 1, :agreement
  property :id, Serial
  property :amount, Decimal, :scale => 2, :min => 0.01
  property :comments, String, :length => 20
  property :created_at, Time
  property :updated_at, Time
  property :currency, Enum[*CURRENCY_CODES], :default => :CNY
  validates_with_block do
    giver == receiver ? false : true
  end

  is :state_machine, :initial => :new, :column => :status do
    state :new
    state :agreed
    state :denied

    event :agree do
      transition :from => :new, :to => :agreed
    end

    event :deny do
      transition :from => :new, :to => :denied
    end
  end

  extend Forwardable
  def_delegator :giver, :local_id, :giver_local_id
  def_delegator :receiver, :local_id, :receiver_local_id
end


     DataMapper::ImmutableError:
       Immutable resource cannot be modified
     # ./lib/models.rb:90:in `count!'
     # ./spec/models_spec.rb:59:in `block (4 levels) in <top (required)>'
     # ./spec/models_spec.rb:63:in `block (4 levels) in <top (required)>'

Best regards,
Zhi-Qiang Lei
[email protected]

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to