2011-11-03 14 views
5

Pracowałem nad tym kilka godzin, ale nie mogę wymyślić tego.Ustawianie waluty za pomocą wybrania formy za pomocą klejnotu Pieniądze

Chciałbym, aby użytkownik wybrał odpowiednią walutę za cenę, którą wypełnia w formularzu.

Używam Money Gem (https://github.com/RubyMoney/money). Wszystkie wartości są ustawione poprawnie, ALE nie jest to waluta, która ustawia się tylko na wartość domyślną (USD), niezależnie od tego, co jest wysyłane za pośrednictwem formularza. Przypuszczam, że to mój brak doświadczenia z klejnotem Money.

w moim modelu:

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 oraz: total_price udział w wspólną cechę: atrybut waluty.

: price_per_unit pracy z cents_per_unit i waluty : total_price pracy z centów i waluty

w moim kontrolera:

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 

W mojej nowej formy widzenia:

 <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> 

próbowałam zmieniając domyślną walutę na AUD, wszystkie moje rekordy zostaną ustawione na AUD, niezależnie od mojego wyboru w moim wyborze.

W moim dzienniku:

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) 

Jakieś pomysły?

Cheers,

Joël

+0

rozwiązany przez dodanie jednej linii stworzyć metodę. Edytowane oryginalne pytanie z rozwiązaniem – zabumba

Odpowiedz

2

SOLVED !!

rozwiązane przez dodanie jednej linii stworzyć metodę:

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

Świetnie! Znak Plz jako rozwiązany :) –

Powiązane problemy