2013-07-15 57 views
9

Làm cách nào tôi có thể chuyển đổi số nhập của người dùng từ một số từ 11,5 đến 11,5?Chuyển đổi dấu phẩy thành dấu phân cách

Tôi đã thử những điều sau khi gọi lại:

before_validation :comma_to_delimiter 

def comma_to_delimiter 
    self.price.to_s.gsub(',', '.').to_f 
end 

Nhưng điều này không làm việc. Tôi muốn người dùng có thể nhập bất kỳ thứ gì anh ta muốn làm dấu phân cách - hiện tại, ứng dụng sẽ phát ra lỗi khi người dùng sử dụng dấu phẩy thay vì một điểm.

+0

Bạn có thể giải thích loại self.price giá trị nào không? – Slicedpan

+0

Bạn muốn thay đổi điều này để hiển thị trong ứng dụng đường ray, phải không? –

+0

Không, tôi không quan tâm về cách nó được hiển thị. Tôi đã thực hiện điều đó thông qua các ngôn ngữ. Giá là một giá trị float cần được lưu trữ dưới dạng dấu phẩy với dấu phân cách. Vấn đề là ở Đức, mọi người nhập vào dấu phẩy thay vì chỉ là dấu phân cách. Vì vậy, ngay cả khi một người Đức gõ "5,5", nó vẫn nên được lưu trữ là "5,5". Và nếu ai đó nhập chính xác ở vị trí đầu tiên, chẳng hạn như "5.5", thì không có gì phải thay đổi. Bất kỳ ý tưởng làm thế nào để làm điều này? – weltschmerz

Trả lời

9

Điều bạn đang làm có thể không phải là cách tốt nhất, vì vậy có lẽ ai đó có thể trả lời bằng cách tiếp cận tốt hơn. Nhưng để có được đường dây của bạn làm việc bạn cần phải làm cho nó thực sự tồn tại sự thay đổi.

self.price.to_s.gsub(',', '.').to_f 

Sẽ chỉ trả về thay đổi, nhưng điều đó không đi đâu cả trong gọi lại!

self.price = self.price.to_s.gsub(',', '.').to_f 
# OR 
self.price.to_s.gsub!(',', '.').to_f 

Sẽ tiếp tục thay đổi trong đối tượng.

+0

Phiên bản thứ hai sẽ không thay đổi giá trị của self.price – Slicedpan

+0

Tôi đã chạy mã cục bộ và chắc chắn nhất, bạn đã thử chưa? Thử nghiệm và hoạt động chính xác như được mô tả trong Rails 3. – Matt

+0

Chỉ cần thực hiện, nếu self.price đã là một chuỗi, sau đó nó sẽ thay đổi. Tôi đã đi trên giả định rằng nó là một số điểm nổi (có thể đã hiểu lầm câu hỏi!) – Slicedpan

11

Ở một số quốc gia, dấu phẩy là dấu phân cách tiền tệ chuẩn và nếu người dùng nhập "19,99" vào biểu mẫu, nó sẽ được lưu dưới dạng "19.00" trừ khi bạn xử lý chuyển đổi dấu phân tách theo cách thủ công. Tôi nghĩ rằng cách đúng đắn để giải quyết vấn đề này là viết các bộ định vị thuộc tính tùy chỉnh.

class Product < ActiveRecord::Base 
    def price=(val) 
    val.sub!(',', '.') if val.is_a?(String) 
    self['price'] = val 
    end 
end 
+2

Sẽ là tốt đẹp để xử lý toàn cầu này cho tất cả các thuộc tính float. – Vassilis

Các vấn đề liên quan