app/rich_types is the preferred location. I'll add that to the docs.
thanks,
Bryan
Brian Corbin wrote:
I ended up going with your suggestion, Bryan. Thanks! I initially
had trouble figuring out where to put the type definition as it's not
mentioned in any of the documentation that I could find. I ended up
putting it in config/initializers/cents.rb, and I had to change it
from class HoboType::Cents to class Hobo::Cents, but it seems to be
working great now.
Brian
On Feb 1, 11:40 am, Brian Corbin <[email protected]> wrote:
I think this is the fix. Added to Product and ProductOrders:
def initialize(*params)
super(*params)
self.price = Money.new(cents, currency)
end
Maybe I should be doing this with the after_initialize callback
instead, but this seems to work.
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.