2011-11-20 13 views
6

Potrzebuję użyć procent w mojej aplikacji Rails. W dowolnym widoku, w tym w przypadku wprowadzenia przez użytkownika, format musi być w formacie setek, 100.000. Kiedy jest używany w obliczeniach, musi być reprezentowany w setnym formacie, 1.00000.Przechowywanie procentu w Railsach + MySQL

Moja migracja (Dodaję kolumny do istniejącej tabeli) ma następującą linię: (1.00000) formatu

add_column :worker, :cash_split, :decimal, :precision => 6, :scale => 5 

Więc od teraz, ja przechowywanie go w setnych. Moją podstawą wyboru przechowywania w tym formacie jest to, że rozumiem czystszą logikę biznesową (tzn. Nie kłamie żaden kod worker.cash_split/100.0.to_d), gdy potrzebuję wykonać mnożenie.

Moja jedyna myśl była może nadużywanie metody built_of. Mogłem przechowywać dane w setkach (100.000) w formacie cash_split, a następnie utworzyć atrybut accessor cash_split_percentage, który zwraca cash_split w swoim odpowiedniku w formacie 1.0000.

Odpowiedz

5

Twoja pierwsza myśl jest właściwa ... nie nadużywaj jej.

Powinieneś zapisać numery procentowe w bazie danych w setnym formacie. I używaj tego formatu we wszystkich swoich obliczeniach Ruby.

Wartości procentowe to konwencja z wyświetlaczem. Np. Numer o numerze 0.45 jest wyświetlany jako 45%. W związku z tym użyj pomocnika Wyświetl, aby przekonwertować swoje wartości procentowe z ich formatu wewnętrznego (liczby dziesiętne) do wybranego formatu wyświetlania - ciąg zawierający znak%.

+2

Jak obsługiwałbyś procenty w formularzach? Użytkownicy będą chcieli wprowadzić go w postaci 45%, ale powinien on być zapisany jako 0.45. Niemniej jednak, jeśli użytkownik wprowadzi inne pole źle, a formularz zostanie ponownie renderowany, pole procentowe powinno mieć wartość 45, a nie 0,45. Chciałbym powiedzieć, że callback może nie być ostatecznym rozwiązaniem. –

+0

można napisać programy pobierające i ustawiające dla wartości procentowej w formacie setek. więc będziesz miał atrybut #some_ratio i metody #some_ration_percentage & # some_ration_percentage =, które po prostu podzieli/pomnoży 100 i przejdą dalej. – Emirikol

Powiązane problemy