Sadece küçük bir güncelleme ve RoR geliştirmedeki bazı yeni başlayanlar / yeni başlayanlar için tüm cevapların bir araya getirilmesi, kesinlikle bazı açıklamalar için buraya gelecektir.
Para ile çalışma
:decimal
@Molf'un önerdiği gibi (ve şirketimin para ile çalışırken altın standart olarak kullandığı şey) DB'de para depolamak için kullanın .
# precision is the total number of digits
# scale is the number of digits to the right of the decimal point
add_column :items, :price, :decimal, precision: 8, scale: 2
Birkaç puan:
Taşıma nasıl oluşturulur?
Yukarıdaki içerikle taşıma oluşturmak için terminalde çalıştırın:
bin/rails g migration AddPriceToItems price:decimal{8-2}
veya
bin/rails g migration AddPriceToItems 'price:decimal{5,2}'
Bu blog yazısında açıklandığı gibi .
Para birimi biçimlendirme
KISS ekstra kütüphaneleri güle güle ve kullanım yerleşik yardımcıları. Kullanım number_to_currency
@molf ve @facundofarias olarak önerdi.
İle oynamak için number_to_currency
Raylar konsolundaki yardımcı, bir çağrı göndermek ActiveSupport
'ın NumberHelper
yardımcı erişmek için sınıfta.
Örneğin:
ActiveSupport::NumberHelper.number_to_currency(2_500_000.61, unit: '€', precision: 2, separator: ',', delimiter: '', format: "%n%u")
Aşağıdaki çıktıyı verir
2500000,61€
Diğer kontrol options
ait number_to_currency yardımcı.
Nereye koymalı
Bir uygulama yardımcısına koyabilir ve istediğiniz miktarda görünüm içinde kullanabilirsiniz.
module ApplicationHelper
def format_currency(amount)
number_to_currency(amount, unit: '€', precision: 2, separator: ',', delimiter: '', format: "%n%u")
end
end
Ya Item
da bir örnek yöntemi olarak modele koyabilir ve fiyatı biçimlendirmeniz gereken yere (görünümlerde veya yardımcılarda) çağırabilirsiniz.
class Item < ActiveRecord::Base
def format_price
number_to_currency(price, unit: '€', precision: 2, separator: ',', delimiter: '', format: "%n%u")
end
end
Ve number_to_currency
bir contrroler içinde nasıl kullandığımın bir örneği ( negative_format
geri ödemeleri temsil etmek için kullanılan seçeneğe dikkat edin )
def refund_information
amount_formatted =
ActionController::Base.helpers.number_to_currency(@refund.amount, negative_format: '(%u%n)')
{
# ...
amount_formatted: amount_formatted,
# ...
}
end
DECIMAL(19, 4)
popüler bir seçimdir kontrol bu da kontrol burada , umut olur kaç ondalık kullanımına yerler karar vermek Dünya Para Biçimleri.