/ rails

Fix ahoy no implicit conversion of Hash into String

Someone got some trouble "no implicit conversion of Hash into String" after upgraded properties field from json to jsonb type in Ahoy. Or you can follow this issue#86 or issue#120.

There is a easy way to fix it. Just add following content in ahoy related class:

# config/initializers/ahoy.rb

class Ahoy::Store < Ahoy::Stores::ActiveRecordStore
  def track_event(name, properties, options, &block)
    event =
      event_model.new do |e|
        e.id = options[:id]
        e.visit_id = ahoy.visit_id
        e.user = user if e.respond_to?(:user=)
        e.name = name
        e.properties = properties.to_json # the keypoint
        e.time = options[:time]
      end

    yield(event) if block_given?

    begin
      event.save!
    rescue *unique_exception_classes
      # do nothing
    end
  end
end

The key point is the track_event, just override it and convert the type for properties assignment.