#ruby-on-rails #ruby #rails-engines
Вопрос:
В стандартном приложении Rails легко зарегистрировать пользовательский тип записи ActiveRecord:
Например 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)
Как добиться того же в двигателе rails?
Комментарии:
1. Я бы сказал, что это должно быть очень похоже? Определите тип, запросите его в railtie и определите инициализатор в вашем railtie, чтобы зарегистрировать его.
Ответ №1:
Я бы предположил, что что-то подобное сработало бы даже без Рейли:
# 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