Rails engine - registering an ActiveRecord type

616 views Asked by At

In the standard Rails application it is easy to register custom ActiveRecord type:

For example config/initializers/duration_type.rb:

class DurationType < ActiveRecord::Type::String
  def cast(value)
    return value if value.blank? || value.is_a?(ActiveSupport::Duration)

    ActiveSupport::Duration.parse(value)
  end

  def serialize(duration)
    duration ? duration.iso8601 : nil
  end
end

ActiveRecord::Type.register(:duration, DurationType)

How to achieve the same in the rails engine?

1

There are 1 answers

0
BroiSatse On BEST ANSWER

I'd imagine something like that would work even without railtie:

# my_gem/lib/my_gem/duration_type.rb
class MyGem::DurationType < ActiveRecord::Type::String
  def cast(value)
    return value if value.blank? || value.is_a?(ActiveSupport::Duration)

    ActiveSupport::Duration.parse(value)
  end

  def serialize(duration)
    duration ? duration.iso8601 : nil
  end
end

ActiveSupport.on_load(:active_record) do
  ActiveRecord::Type.register :duration, MyGem::DurationType
end