2011-11-03 89 views
5

我一直在這一個工作了幾個小時,但我不知道這一個。設置貨幣與表格選擇與錢寶石

我願意讓用戶選擇相應的貨幣來填寫表格中的價格。

我正在使用Money Gem(https://github.com/RubyMoney/money)。所有的值都設置正確,但不是通過表單發送的只設置爲其默認值(USD)的貨幣。我想這是我對Money寶石的經驗不足。

在我的模型:

require 'money' 
    composed_of :price_per_unit, 
    :class_name => "Money", 
    :mapping => [%w(cents_per_unit cents), %w(currency currency_as_string)], 
    :constructor => Proc.new { |cents_per_unit, currency| Money.new(cents_per_unit || 0, currency || Money.default_currency) }, 
    :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") } 

    composed_of :total_price, 
    :class_name => "Money", 
    :mapping => [%w(cents cents), %w(currency currency_as_string)], 
    :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) }, 
    :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") } 

:貨幣屬性:price_per_unit和:共同的TOTAL_PRICE份額。

:price_per_unit與cents_per_unit和貨幣 工作:TOTAL_PRICE有美分,貨幣

在我的控制器工作:

def new 
    @power_plant_substrate = PowerPlantSubstrate.new 

    # preparing the form select for the currencies 
    @currencies = [] 
    major_currencies(Money::Currency::TABLE).each do |currency| 
     name = Money::Currency::TABLE[currency][:name] 
     iso_code = Money::Currency::TABLE[currency][:iso_code] 
     @currencies << [name, iso_code] 
    end 
    end 

在我的新形式觀點:

 <p> 
     <%= f.select(:currency, @currencies) %> 
     </p> 
     <p> 
     <%= f.label :price_per_unit %> 
     <%= f.number_field :price_per_unit, :size => 5, :value => 0, :step => 0.01, :min => 0 %> 
     </p> 
     <p> 
     <%= f.label :total_price %> 
     <%= f.number_field :total_price, { :step => 1, :size => 10, :value => 0 } %> 
     </p> 

我曾嘗試將默認貨幣更改爲澳元,然後我的所有記錄都會設置爲澳元,無論我選擇何種選擇。

在我的日誌:

Started POST "/power_plant_substrates" for 127.0.0.1 at 2011-11-03 00:40:38 +0100 
    Processing by PowerPlantSubstratesController#create as JS 
    Parameters: {"utf8"=>"✓", "feedstock"=>"", "power_plant_substrate"=>{"power_plant_id"=>"59", "substrate_id"=>"159", "quantity"=>"1", "trade"=>"selling", "currency"=>"JPY", "price_per_unit"=>"1.00", "total_price"=>"1", "address"=>"Pélussin, France", "transport"=>"pickup_only", "latitude"=>"", "longitude"=>"", "description"="sadf"}, "commit"=>"Save"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 21]] 
    PowerPlant Load (0.3ms) SELECT "power_plants".* FROM "power_plants" WHERE "power_plants"."user_id" = 21 AND "power_plants"."name" = 'My Tradings' LIMIT 1 
    SQL (0.7ms) INSERT INTO "power_plant_substrates" ("address", "cents", "cents_per_unit", "created_at", "currency", "description", "gmaps", "latitude", "locale", "longitude", "period","power_plant_id", "quantity", "state", "substrate_id", "trade", "transport","unit_of_measure", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?) [["address", "Pélussin, France"], ["cents", 100], ["cents_per_unit", 100], ["created_at", Wed, 02 Nov 2011 23:40:39 UTC +00:00], ["currency", "CAD"], ["description", "sadf"], ["gmaps", true], ["latitude", 45.417608], ["locale", "us"], ["longitude", 4.676041], ["period", "year"], ["power_plant_id", 59], ["quantity", 1], ["state", "open"], ["substrate_id", 159], ["trade", "selling"], ["transport", "pickup_only"], ["unit_of_measure", "mass"], ["updated_at", Wed, 02 Nov 2011 23:40:39 UTC +00:00]] 
Completed 200 OK in 1107ms (Views: 4.3ms | ActiveRecord: 2.5ms) 

任何想法?

乾杯,

若埃爾

+0

解決通過添加一個行創建方法。用解決方案編輯原始問題 – zabumba

回答

2

解決!!

通過在添加一行解決創建方法:

def create 
    @power_plant_substrate = PowerPlantSubstrate.new(params[:power_plant_substrate]) 

    # here I am setting the currency with what was sent in params 
    @power_plant_substrate.currency = params[:power_plant_substrate][:currency] <=== this line 

... 

end 
+0

太棒了! PLZ標記解決:) –