Search code examples
javascriptruby-on-railsrubycurrency

Best way to convert a field in Rails from decimals to integer in cents


I have a Product model in Rails and the amount is stored as an integer in cents in the database.

Example of this field:

enter image description here

  • What is the best way to allow admins that are creating the product to enter a human-friendly decimal like 10.00 instead of 1000?
  • Should I just do this on the client-side before the form is submitted with Javascript?
  • Should I change the field to a text field instead of integer and convert it with a before_save callback?

It seems like the Money gem might be overkill for this. Surely this is a common problem. What is a common way people solve this?


Solution

  • Just as ideas

    Using money gem

    class Product < ApplicationRecord
      monetize :price_cents
    end
    
    = f.input :price
    

    Or using monkeypatching

    class Product < ApplicationRecord
      def price
        self[:price] / 100.0
      end
    
      def price=(value)
        super(value * 100)
      end
    end
    

    In my opinion gem is more convenient