Heroku にアプリをデプロイしましたが、データベースに新しいアプリを作成しようとすると、以下のエラーが発生しChoice
ます。仮想属性を使用して、アプリ内のお金を整数として処理しています。自分のマシンでは問題なく動作しますが、Heroku toto_d
メソッドにデプロイすると失敗します..なぜ:)
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
私のChoice
モデルには以下が含まれています:
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
編集:
私は解決策を見つけたと思います。コードを書き直したので、代わりに以下が含まれるようになりました。なぜ機能しないのか、まだわかりto_d
ません..
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