Weird, I thought I posted this once already.  Anyway, the solution was
adding this new initialize definition to my Product and ProductOrder
models:

  def initialize(*params)
    super(*params)
        self.price = Money.new(cents, currency)
  end

Brian

On Feb 1, 11:15 am, Bryan Larsen <[email protected]> wrote:
> David Mathers contributed this very nice Cents rich type:
>
> http://gist.github.com/127101
>
> I'm supposed to get it integrated into hobo-contrib.  We finally added
> the capability to load rich types from a plugin, so I don't have any
> excuse any longer.
>
> I'm sure the money gem could be made to work, but I'm sure it's easier
> to code up a Money model from scratch using all the power that Hobo
> gives you.
>
> Bryan
>
>
>
> Brian Corbin wrote:
> > I was looking to add price information to the products in my
> > application.  I may have to support other currencies besides USD in
> > the future, so I was looking at the Money gem 
> > fromhttp://money.rubyforge.org/.
> > I'm pretty sure I've correctly added the code to my application;
> > here's what I've done:
>
> > I added a cents and currency field to my Product class, and a
> > composed_of helper for price:
> > class Product < ActiveRecord::Base
> > ...
> >   fields do
> >        ...
> >    cents          :integer, :default => 0
> >    currency      :string, :default => "USD"
> >   end
> > composed_of :price, :class_name => "Money", :mapping => [ %w(cents,
> > cents), %w(currency, currency) ]
>
> > My Product class has some relations:
> >   has_many :product_orders
> >   has_many :orders, :through => :product_orders, :accessible => false
>
> > Now, I am thinking that the price of a Product can change depending on
> > several factors, and so the prices attached to the Product model are
> > just the default price you get when creating an Order.  So the
> > ProductOrder join table also needs to have price information as well.
>
> > class ProductOrder < ActiveRecord::Base
> > ...
> >   fields do
> >     quantity :integer, :default => 1
> >     cents   :integer, :default => 0
> >     currency :string, :default => "USD"
> >   end
>
> >   belongs_to :product
> >   belongs_to :order
> >   composed_of :price, :class_name => "Money", :mapping => [ %w(cents,
> > cents), %w(currency, currency) ]
> > end
>
> > I've also added these methods to both the Product and ProductOrders
> > models:
>
> >   def formatted_price
> >     self.price.format(:html)
> >   end
>
> >   def formatted_price=(price)
> >     self.price = Money.new(price)
> >   end
>
> > I run the migration and it adds the cents and currency fields to the
> > DB.  When I fire up the application server, I get an error on the New
> > Order page:
>
> > NoMethodError in OrdersController#new
>
> > undefined method `round' for nil:NilClass
>
> > The full trace is here:http://pastebin.ca/1774588
>
> > The trace shows the error is occurring when it gets to the field-list
> > for Order, which includes products, and product_orders.
>
> > So my questions are:  What is calling the round method, and what's it
> > being called on?  How do I get my app to use the formatted_price
> > methods instead of the price, cents, or currency fields?  Should I
> > pull out all this stuff and just use doubles and worry about other
> > currencies if/when that problem comes up? :)   Thanks!

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers?hl=en.

Reply via email to