如何使Ahoy gem 跟踪具有uuid 的用户的访问?
How to make Ahoy gem tracking visits for users with uuid?
我有一个 User
模型,其 uuid 用于 id
列。
嗨 gem 按预期创建了访问,但 user_id
是错误的。
有什么想法吗?
好的。知道了。 Ahoy gem 不适用于 user_id 作为 UUID。它从 uuid 中获取第一位数字并将其存储在 user_id
中,用于 Ahoy::Visit,这可能看起来像随机值。
解决方法是将user_id类型改为uuid.
此迁移可以解决问题:
class ChangeAhoyVisits < ActiveRecord::Migration[5.2]
def change
Ahoy::Visit.destroy_all
remove_column :ahoy_visits, :user_id, :bigint
add_column :ahoy_visits, :user_id, :uuid, foreign_key: true, null: true
add_index :ahoy_visits, :user_id
end
end
可能还需要将相同的 type: :uuid
添加到 ahoy_events table 中的 user_id 列。在几次 rake db:rollback
之后,我最终将 rails generate ahoy:install
创建的原始迁移文件修改为在 运行 迁移之前看起来像这样:
def change
create_table :ahoy_visits do |t|
t.string :visit_token
t.string :visitor_token
# the rest are recommended but optional
# simply remove any you don't want
# user
t.references :user, type: :uuid, foreign_key: true, index: true
# standard
t.string :ip
t.text :user_agent
t.text :referrer
t.string :referring_domain
t.text :landing_page
# technology
t.string :browser
t.string :os
t.string :device_type
# location
t.string :country
t.string :region
t.string :city
t.float :latitude
t.float :longitude
# utm parameters
t.string :utm_source
t.string :utm_medium
t.string :utm_term
t.string :utm_content
t.string :utm_campaign
# native apps
t.string :app_version
t.string :os_version
t.string :platform
t.datetime :started_at
end
add_index :ahoy_visits, :visit_token, unique: true
create_table :ahoy_events do |t|
t.references :visit
t.references :user, type: :uuid, foreign_key: true, index: true
t.string :name
t.jsonb :properties
t.datetime :time
end
add_index :ahoy_events, [:name, :time]
add_index :ahoy_events, :properties, using: :gin, opclass: :jsonb_path_ops
end
在 运行 之后,这个略微修改的迁移而不是原始的一切似乎都正确地填充在数据库中的 'ahoy.track' 上。
我有一个 User
模型,其 uuid 用于 id
列。
嗨 gem 按预期创建了访问,但 user_id
是错误的。
有什么想法吗?
好的。知道了。 Ahoy gem 不适用于 user_id 作为 UUID。它从 uuid 中获取第一位数字并将其存储在 user_id
中,用于 Ahoy::Visit,这可能看起来像随机值。
解决方法是将user_id类型改为uuid.
此迁移可以解决问题:
class ChangeAhoyVisits < ActiveRecord::Migration[5.2]
def change
Ahoy::Visit.destroy_all
remove_column :ahoy_visits, :user_id, :bigint
add_column :ahoy_visits, :user_id, :uuid, foreign_key: true, null: true
add_index :ahoy_visits, :user_id
end
end
可能还需要将相同的 type: :uuid
添加到 ahoy_events table 中的 user_id 列。在几次 rake db:rollback
之后,我最终将 rails generate ahoy:install
创建的原始迁移文件修改为在 运行 迁移之前看起来像这样:
def change
create_table :ahoy_visits do |t|
t.string :visit_token
t.string :visitor_token
# the rest are recommended but optional
# simply remove any you don't want
# user
t.references :user, type: :uuid, foreign_key: true, index: true
# standard
t.string :ip
t.text :user_agent
t.text :referrer
t.string :referring_domain
t.text :landing_page
# technology
t.string :browser
t.string :os
t.string :device_type
# location
t.string :country
t.string :region
t.string :city
t.float :latitude
t.float :longitude
# utm parameters
t.string :utm_source
t.string :utm_medium
t.string :utm_term
t.string :utm_content
t.string :utm_campaign
# native apps
t.string :app_version
t.string :os_version
t.string :platform
t.datetime :started_at
end
add_index :ahoy_visits, :visit_token, unique: true
create_table :ahoy_events do |t|
t.references :visit
t.references :user, type: :uuid, foreign_key: true, index: true
t.string :name
t.jsonb :properties
t.datetime :time
end
add_index :ahoy_events, [:name, :time]
add_index :ahoy_events, :properties, using: :gin, opclass: :jsonb_path_ops
end
在 运行 之后,这个略微修改的迁移而不是原始的一切似乎都正确地填充在数据库中的 'ahoy.track' 上。