0

我有一个User带有 uuidid列的模型。

Ahoy gem 按预期创建访问,但这user_id是错误的。

有任何想法吗?

4

2 回答 2

1

行。知道了。Ahoy gem 不能将 user_id 用作 UUID。它从 uuid 获取第一个数字并将其存储在user_idAhoy::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
于 2020-07-29T13:50:28.470 回答
0

可能还需要将相同的内容添加type: :uuid到 ahoy_events 表中的 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”上。

于 2021-03-11T23:55:11.960 回答