I have an App deployed to Heroku, which gives me the below error when trying to create a new Choice
in the database. I'm using virtual attributes to handle money in the app as integers. It works just fine on my own machine but when deployed to Heroku to to_d
method fails.. why :)
2012-11-12 09:48:54+00:00 app web.1 - -
2012-11-12 09:48:54+00:00 heroku router - - POST www.mydomain.com/choices dyno=web.1 queue=0 wait=0ms service=68ms status=500 bytes=643
2012-11-12 09:48:54+00:00 app web.1 - -
2012-11-12 09:48:54+00:00 app web.1 - - Started POST "/choices" for 87.60.190.9/x1-6-00-16-cb-c1-a8-b7.k989.webspeed.com at 2012-11-12 09:48:54 +0000
2012-11-12 09:48:54+00:00 app web.1 - -
2012-11-12 09:48:54+00:00 app web.1 - - NoMethodError (undefined method `to_d' for 6600:Fixnum):
2012-11-12 09:48:54+00:00 app web.1 - - app/models/choice.rb:27:in `value_in_currency'
2012-11-12 09:48:54+00:00 app web.1 - - app/controllers/choices_controller.rb:9:in `create'
2012-11-12 09:48:54+00:00 app web.1 - -
2012-11-12 09:48:54+00:00 app web.1 - -
2012-11-12 09:48:54+00:00 app web.1 - - Processing by ChoicesController#create as HTML
2012-11-12 09:48:54+00:00 app web.1 - - Parameters: {"utf8"=>"✓", "authenticity_token"=>"YygjksxB+1SXnJ8j4jvTtxnh2JfJELpCeHysGrvItcU=", "choice"=>{"spotarea_id"=>"1", "product_id"=>"1", "value_in_currency"=>"66", "exposure"=>"80", "deliverydate"=>"2012-11-13"}, "commit"=>"Create Choice"}
2012-11-12 09:48:54+00:00 app web.1 - - Completed 500 Internal Server Error in 38ms
My Choice
model contains the following:
class Choice < ActiveRecord::Base
belongs_to :user
belongs_to :spotarea
belongs_to :product
has_many :bets, :dependent => :destroy
attr_accessible :deliverydate, :exposure, :value_in_currency, :user_id, :spotarea_id, :product_id
attr_accessible :deliverydate, :exposure, :value_in_currency, :user_id, :spotarea_id, :product_id, as: :admin
# Validations
validates :spotarea, :product, :value_in_currency, :exposure, :presence => { :message => "is missing!" }
validates :value_in_currency, :exposure, :numericality => { :message => "is not numeric!" }
validates :value_in_currency, :format => { :with => /^\d+\.?\d{0,2}$/, :message => "is not correctly formatted!" }
def value_in_currency
value.to_d/100 if value?
end
def value_in_currency=(currency)
self.value = currency.to_d*100 if currency.present?
end
end
EDIT:
I think I found a solution. I rewrote the code, so it now contains the below instead. Still can't see why the to_d
don't work..
def value_in_currency
BigDecimal(value.to_s)/100 if value?
end
def value_in_currency=(currency)
self.value = BigDecimal(currency.to_s)*100 if currency.present?
end
I think I found a solution. I rewrote the code, so it now contains the below instead. Still can't see why the to_d don't work..
def value_in_currency
BigDecimal(value.to_s)/100 if value?
end
def value_in_currency=(currency)
self.value = BigDecimal(currency.to_s)*100 if currency.present?
end