Problems with composed_of


#1

Hi,

I’m having problems with composed_of

I have this two classes:

class Declaration < ActiveRecord::Base
composed_of :amount, :class_name => “Currency”, :mapping =>
%w(amount amount)
end

class Currency
attr_accessor :round, :decimal, :amount

def initialize(amount)
self.amount = amount
self.round = amount.to_i.to_s[0…-3]
self.decimal = amount.to_i.to_s[-2…-1]
end

end

What I want to do: I want “amount” of the declaration model to be an
object. I’m trying to execute the following;

declaration = Declaration.new
=> #<Declaration:0xb739f1b8 @attributes={“updated_at”=>nil,
“description”=>nil, “amount”=>nil, “user_id”=>nil, “created_at”=>nil},
@new_record=true>

declaration.amount = 12
NoMethodError: undefined method amount' for 12:Fixnum from (eval):3:inamount=’
from (irb):2

I would like to be able to do:
declaration.amount = 1200
declaration.amount.cents() # or something like that)

What am I doing wrong?


#2

LeonB wrote:

self.round = amount.to_i.to_s[0..-3]
self.decimal = amount.to_i.to_s[-2..-1]

end

I would like to be able to do:
declaration.amount = 1200

declaration.amount = Currency.new(1200)


We develop, watch us RoR, in numbers too big to ignore.


#3

Thanks for the reply. But doing Currency.new() every time seems a bit
like a hassle.


#4

Ah, added this tot the model:

def amount=(amount)
@amount = Currency.new(amount)
end

that worked nicely.