0

我正在使用 Rails 4.1.5 和 Ahoy。我在访问模型中添加了一个名为“visitor_email”的附加字段(带有迁移)。我可以使用visitor_email 手动创建一个访问对象。

在 config/initializers/ahoy.rb 中,我订阅了 track_visit 数据存储。在这里,我想将用户的电子邮件添加到新的访问模型中。我可以看到在调用 super 之前该属性已添加到数据哈希中。但我也可以认为它永远不会写入数据库。

class Ahoy::Store < Ahoy::Stores::ActiveRecordTokenStore
  # customize here

  def track_visit(data)
    # new visit

    # if the landing page has a param that indicates it came from the share_profile_mailer
    # if request.params[:landing_page] != request.params[:landing_page].split('?visiting_user=')
    #   data[:visitor_email] = request.params[:landing_page].split('?visiting_user=')[1]
    # end

    data[:visitor_email] = "example@email.com"
    super(data)
  end
end

看着服务器,我看到:

Processing by Ahoy::VisitsController#create as JSON
  Parameters: {"visit_token"=>"d869c631-7f3a-4057-9bc2-eaa9160e9247", "visitor_token"=>"ebe8068e-fef0-4c25-93fd-54fe9e9aac75", "platform"=>"Web", "landing_page"=>"http://localhost:3000/organizations/35?visiting_user=colindmccann@gmail.com", "screen_width"=>1440, "screen_height"=>900, "visit"=>{"visit_token"=>"d869c631-7f3a-4057-9bc2-eaa9160e9247", "visitor_token"=>"ebe8068e-fef0-4c25-93fd-54fe9e9aac75", "landing_page"=>"http://localhost:3000/organizations/35?visiting_user=colindmccann@gmail.com", "screen_height"=>900, "screen_width"=>1440}}

[7, 16] in /Users/colin/Dev/Rails/sponsorcircle/config/initializers/ahoy.rb
    7:     # if the landing page has a param that indicates it came from the share_profile_mailer
    8:     # if request.params[:landing_page] != request.params[:landing_page].split('?visiting_user=')
    9:     #   data[:visitor_email] = request.params[:landing_page].split('?visiting_user=')[1]
   10:     # end
   11: 
   12:     data[:visitor_email] = "example@email.com"
   13:     byebug
=> 14:     super(data)
   15:   end
   16: end
(byebug) data
{:started_at=>Mon, 27 May 2019 12:05:55 UTC +00:00, :visitor_email=>"example@email.com"}
(byebug) c
  User Load (0.5ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 312  ORDER BY "users"."id" ASC LIMIT 1
   (0.1ms)  BEGIN
  SQL (0.4ms)  INSERT INTO "visits" ("browser", "device_type", "ip", "landing_page", "os", "screen_height", "screen_width", "started_at", "user_agent", "user_id", "visit_token", "visitor_token") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING "id"  [["browser", "Chrome"], ["device_type", "Desktop"], ["ip", "127.0.0.1"], ["landing_page", "http://localhost:3000/organizations/35?visiting_user=colindmccann@gmail.com"], ["os", "Mac OS X"], ["screen_height", 900], ["screen_width", 1440], ["started_at", "2019-05-27 12:05:55.071724"], ["user_agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"], ["user_id", 312], ["visit_token", "d869c631-7f3a-4057-9bc2-eaa9160e9247"], ["visitor_token", "ebe8068e-fef0-4c25-93fd-54fe9e9aac75"]]
   (0.2ms)  COMMIT
Completed 200 OK in 7834ms (Views: 0.2ms | ActiveRecord: 4.1ms)

我最初认为这可能与访问控制器不允许我的参数有关。但是,我无法在 track_visit 中设置任何访问字段(我尝试过设置浏览器和 utm_medium)

注意:我已经重新启动了 rails 服务器

我在这里误解了什么吗?或者以错误的方式处理这个问题?

4

1 回答 1

0

这个问题原来与我使用的 Ahoy gem 的版本有关。我升级到 2.2.0(我认为 2.X 就足够了),一切都按预期工作 - 请参阅https://github.com/ankane/ahoy/blob/master/docs/Ahoy-2-Upgrade.md了解更多信息细节

于 2019-05-30T10:00:29.833 回答