2012-02-04 2 views
1

저는 Rails에 처음으로 익숙합니다. 돈을 사용하는 것은 처음입니다.Ruby on Rails 돈 보석 : 양식에서 돈을 벌어주세요.

내 데이터베이스에서
composed_of :cash, 
:class_name => "Money", 
:mapping => [%w(amount 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") } 

나는 두 개의 필드가 있습니다 : 나는 또한 양식을 가지고

양 (정수) 및 통화 (문자열) 돈 보석 위키에 명시된 바와 같이 나는 나의 모델에 다음 코드를 삽입 사용자가 특정 현금 금액을 입력 할 수 있었습니까?

<%= f.number_field :amount %> 

여기에서 문제는 사용자가 150 센트 대신 1,50 개를 입력하는 것입니다. 이것을 데이터베이스에 삽입하기 전에 1,50의 사용자 입력을 150으로 변환하는 가장 좋은 방법은 무엇입니까?

감사합니다, GERWIN

답변

0

는 점으로 쉼표를 교체 float로서 구문 분석하고 100

("1,50".gsub(',', '.').to_f * 100).to_i 
# => 150 
0

몇 가지 옵션을 사용할 수 있습니다 곱합니다.

Money.default_currency에 정의 된 기본 통화가 아닌 다른 형식으로을 입력하면 값이 입력되는 통화를 에 입력해야합니다.

1) 새 합성 된 액세서리 #cash을 사용하십시오.

<%= f.number_field :cash %> 

참고 : f.number_field 메서드는 텍스트 필드가 아닌 숫자 스피너를 생성합니다.

2) #amount의 정의를 오버로드하십시오. 이 메서드는 compos_of 매크로의 필요성을 부정합니다.

def amount 
    cents = read_attribute(:amount) || 0 
    currency = read_attribute(:currency_as_string) || Money.default_currency 
    Money.new(cents, currency) 
end 

def amount=(value) 
    cash = Money.from_string(value) 
    write_attribute(:amount, cash.cents) 
end 

는, 구체적으로는 documentation의 클래스 메소드 Money.from_ * 한 번 봐 봐에게 방법 Money.from_string[link]을.