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.