设计 Ahoy 跟踪 link 次访问
Devise Ahoy track link visits
您好,我有一个 rails 应用程序,它是一个封闭的社区,使用 devise、hoy 和 merit。
我们有一个名为资源的脚手架。每个资源都有一个 link
用户模型
class User < ApplicationRecord
has_merit
has_many :visits, class_name: “Ahoy::Visit”
end
资源模型
class Resource < ApplicationRecord
has_rich_text :description
belongs_to :category
end
控制器
我想用Ahoy来跟踪点击link的用户,这样我就可以为访问加分。
查看
<table>
<thead>
<tr>
<th>Title</th>
<th>Link</th>
<th>Category</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @resources.each do |resource| %>
<tr>
<td><%= resource.title %></td>
<td><%= link_to "Learn More", resource.link, class: 'btn btn-dark btn-sm' %></td>
<td><%= resource.category.name %></td>
<td><%= link_to 'Show', resource %></td>
<td><%= link_to 'Edit', edit_resource_path(resource) %></td>
<td><%= link_to 'Destroy', resource, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
架构
create_table "resources", force: :cascade do |t|
t.string "title"
t.string "link"
t.bigint "category_id", null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["category_id"], name: "index_resources_on_category_id"
end
路线
Rails.application.routes.draw do
resources :visits
resources :resources
devise_for :users, controllers: { registrations: 'registrations' }
end
我如何跟踪 link 点击并分配积分?
我没有使用 ahoy,所以我的帮助可能没有用。
我不是 100% 你需要这样做,我认为这可以通过你的资源模型上的点击文件来实现,每次用户点击 link 时更新。
我会尝试什么:
在 Resource_controller.rb 中:
def link
ahoy.track "Link clicked" if params[:clicked]
@resource = Resource.find(params[:id])
end
可见:
<%= link_to "Learn More", resource_link_path(link: resource.link, clicked: true) resource.link, class: 'btn btn-dark btn-sm' %>
Post 如果您找到另一个解决方案,请在下面找到您的解决方案!
让我们在单击 link 时向 visits_controller 发出请求。
config/routes.rb
资源:访问
controllers/visits.rb
class VisitsController < ApplicationController
def create
Ahoy::Visit.track('click', link_id: params[:resource_id])
end
end
我假设 ahoy.authenticate(user) 写在某处
让我们将 class 资源添加到 link 和 link id 作为数据属性,这样我们就可以绑定一个 ajax 调用来访问携带必要数据的控制器
查看
<td><%= link_to "Learn More", resource.link, class: 'resource btn btn-dark btn-sm' data: {resource_id: resource.id} %></td>
assets/javascripts/tracker.js
(document).on('turbolinks:load', function() { #or whatever you used to do in your app
$('a.resource').on('click', function() {
that = this
$.ajax({
url: 'visits',
method: 'POST',
data: {resource_id: $(that).data('resource_id')}
})
})
})
您好,我有一个 rails 应用程序,它是一个封闭的社区,使用 devise、hoy 和 merit。
我们有一个名为资源的脚手架。每个资源都有一个 link
用户模型
class User < ApplicationRecord
has_merit
has_many :visits, class_name: “Ahoy::Visit”
end
资源模型
class Resource < ApplicationRecord
has_rich_text :description
belongs_to :category
end
控制器
我想用Ahoy来跟踪点击link的用户,这样我就可以为访问加分。
查看
<table>
<thead>
<tr>
<th>Title</th>
<th>Link</th>
<th>Category</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @resources.each do |resource| %>
<tr>
<td><%= resource.title %></td>
<td><%= link_to "Learn More", resource.link, class: 'btn btn-dark btn-sm' %></td>
<td><%= resource.category.name %></td>
<td><%= link_to 'Show', resource %></td>
<td><%= link_to 'Edit', edit_resource_path(resource) %></td>
<td><%= link_to 'Destroy', resource, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
架构
create_table "resources", force: :cascade do |t|
t.string "title"
t.string "link"
t.bigint "category_id", null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["category_id"], name: "index_resources_on_category_id"
end
路线
Rails.application.routes.draw do
resources :visits
resources :resources
devise_for :users, controllers: { registrations: 'registrations' }
end
我如何跟踪 link 点击并分配积分?
我没有使用 ahoy,所以我的帮助可能没有用。
我不是 100% 你需要这样做,我认为这可以通过你的资源模型上的点击文件来实现,每次用户点击 link 时更新。
我会尝试什么:
在 Resource_controller.rb 中:
def link
ahoy.track "Link clicked" if params[:clicked]
@resource = Resource.find(params[:id])
end
可见:
<%= link_to "Learn More", resource_link_path(link: resource.link, clicked: true) resource.link, class: 'btn btn-dark btn-sm' %>
Post 如果您找到另一个解决方案,请在下面找到您的解决方案!
让我们在单击 link 时向 visits_controller 发出请求。 config/routes.rb 资源:访问
controllers/visits.rb
class VisitsController < ApplicationController
def create
Ahoy::Visit.track('click', link_id: params[:resource_id])
end
end
我假设 ahoy.authenticate(user) 写在某处 让我们将 class 资源添加到 link 和 link id 作为数据属性,这样我们就可以绑定一个 ajax 调用来访问携带必要数据的控制器 查看
<td><%= link_to "Learn More", resource.link, class: 'resource btn btn-dark btn-sm' data: {resource_id: resource.id} %></td>
assets/javascripts/tracker.js
(document).on('turbolinks:load', function() { #or whatever you used to do in your app
$('a.resource').on('click', function() {
that = this
$.ajax({
url: 'visits',
method: 'POST',
data: {resource_id: $(that).data('resource_id')}
})
})
})