Tôi đang thực hiện giải pháp thương mại bán lẻ đơn giản, trong đó có giá trong một vài kiểu máy khác nhau. Các mức giá này đóng góp cho tổng giá . Hãy tưởng tượng bạn phải trả thêm 0,30 đô la để lựa chọn vị trí đứng đầu cho sữa chua của bạn.Đường ray - Định dạng số dưới dạng định dạng tiền tệ trong Getter
Khi tôi đặt lĩnh vực price
để
t.decimal :price, precision:8, scale:2
Các cửa hàng cơ sở dữ liệu 6.50
như 6.5
. Tôi biết theo cách đường ray tiêu chuẩn, bạn gọi number_to_currency(price)
để nhận giá trị được định dạng trong Chế độ xem. Tôi cần phải lập trình gọi trường price
cũng như chuỗi được định dạng, tức là $ 6,50 một vài địa điểm không trực tiếp là một phần của Chế độ xem. Ngoài ra, nhu cầu của tôi là đơn giản (không có chuyển đổi tiền tệ, vv), tôi muốn có giá được định dạng phổ biến trong mô hình mà không cần gọi lặp đi lặp lại number_to_currency trong chế độ xem.
Có cách nào tốt để tôi có thể sửa đổi giá khởi điểm của mình để giá luôn trả về hai chữ số thập phân với ký hiệu đô la, tức là $ 6,50 khi được gọi?
Xin cảm ơn trước.
CẬP NHẬT
Cảm ơn tất cả mọi người.
Tôi đã chọn sử dụng cách tiếp cận của Alex vì có vẻ như rất 'hack' để thực hiện việc này chỉ để định dạng số. Sử dụng cách tiếp cận của anh ấy, tôi đã làm:
def price_change=(val)
write_attribute :price_change, val.to_s.gsub(/[\$]/,'').to_d
end
def price_change
"$%.2f" % self[:price_change]
end
Chúc mừng.
CẬP NHẬT 2
Caveat Emptor. Một khi bạn làm điều này, bạn sẽ mất khả năng thực hiện các thao tác với số đó bởi vì nó bây giờ là một chuỗi.
Hãy cẩn thận nếu có ai gặp phải vấn đề tương tự như tôi.
Xin cảm ơn! Đã được suy nghĩ phải có một số định dạng số được xây dựng trong. Một chút cảnh giác bao gồm ActionView hoặc ActionController vào mô hình. –
Vấn đề với điều này là bạn không thể sử dụng giá như một số, nó là một chuỗi ở khắp mọi nơi. Tôi đang tìm kiếm một cách để làm cho helper đường ray chuyển đổi nó theo cách này trên to_s – Joelio