2011-07-02 3 views
2

혼란스러운 레일 3 초보자. 내 모델은 다음과 같이 정의 된 PURCHASE_PRICE 속성이 있습니다레일즈 3의 텍스트 필드에 십진수를 표시 할 수 없습니다.

t.decimal :purchase_price, :precision => 12, :scale => 2, :default => 0.00 

내 목표는 간단한 레일을 내가보고이 값을 편집 할 수 있습니다 3 응용 프로그램을하는 것입니다. 필자의 모델에서는 소수점 이하 2 자리를 항상 사용하도록 사용자 정의 getter를 정의했습니다.

def purchase_price 
    sprintf("%.2f",attributes['purchase_price']) 
end 

이것은 쇼 페이지를 표시 할 때 콘솔에서 올바르게 작동합니다. 편집 페이지에는이 값을 편집 할 텍스트 필드가 있습니다. 내 문제는이 값을 '123.00'으로 저장하면 값이 '123.0'으로 표시된다는 것입니다.

질문은 : 은

  • 는 왜 정의는

      라고 가져 오지 게터됩니다 ?
    1. 왜 십진법이 아닌 십진수로 표시됩니까? MySQL의에 저장된

    업데이트

    1. 진수 값 :
    2. 100.2 가치가 방화범을 통해 반환 : 100.20
    3. 값이 텍스트 필드에 표시 : 100.20
    4. 값이 콘솔에서 반환 "100.2"
    5. 텍스트 필드 길이는 문제가되지 않습니다. DB를의 값이 100.21 인 경우
    6. , 시도 100.21
  • +0

    mu가 말한 것에 추가하여 방화 광구를 사용하여 텍스트 필드를 검사 해보십시오. 여전히 123.0이라고 말합니까? 어쩌면 모든 문자를 표시하지 않을 수도 있습니다 (텍스트 필드가 너무 짧음) – corroded

    답변

    2

    로 올바르게 표시이

    f.text_field :purchase_price, :value=>number_to_currency(f.object.purchase_price, :unit=>'') 
    
    (소수점 이하 두 자리로) 통화에 숫자를 변환해야합니다

    :unit=>'' "$"는 제외됩니다.

    그리고 맞춤형 purchase_price 방법을 삭제하고 필요에 따라 number_to_currency 도우미를 사용하는 것이 좋습니다. purchase_price 접근자를 재정의하는 것은 나쁜 생각이 아니지만 문자열이 아닌 숫자를 기대하는 일부 항목을 혼동시킬 수 있습니다.

    +0

    감사합니다. 나는 당신이 제공 한 형식을 알지 못했습니다. – tollbooth

    관련 문제