我有一個簡單的rails應用程序,用戶可以登錄和發佈更新我想要做的就是在每篇文章中添加一個計數,所以如果有人訪問一個帖子,它會得到更新假設如果100個用戶訪問了一個特定的帖子,它應該顯示計數到一百。如何計算用戶在rails中的頁面瀏覽量?
我曾經見過印象派,但是我想這樣做,而不使用寶石。
我想創造另一個莫代爾PostView
class PageView
belongs_to :page
belongs_to :user
end
的
我有一個簡單的rails應用程序,用戶可以登錄和發佈更新我想要做的就是在每篇文章中添加一個計數,所以如果有人訪問一個帖子,它會得到更新假設如果100個用戶訪問了一個特定的帖子,它應該顯示計數到一百。如何計算用戶在rails中的頁面瀏覽量?
我曾經見過印象派,但是我想這樣做,而不使用寶石。
我想創造另一個莫代爾PostView
class PageView
belongs_to :page
belongs_to :user
end
的
您可以在模型中添加一個視場,並增加它在每個頁面視圖
def change
add_column :page_views, :count, :integer, default: 0
end
和
# app/controllers/pages_controller.rb
def increment
@pageview = PageView.where(user_id: current_user, page_id: params[:id]).first_or_create
@pageview.increment!(:count)
end
只需在頁面控制中添加路由在posts_controller#show
class Post
def increase_visit
visit_counter+=1
save!
end
end
然後,你可以做一些增量:,R
# routes.rb
resources :pages do
post :increment
end
你應該使用'increment'方法的'b'版本,否則記錄不會被保存。 https://apidock.com/rails/ActiveRecord/Base/increment! –
Thanks @Зелёный編輯答案 –
你甚至不需要不同的路線。 –
基本上你可以增加額外的現場張貼,像visit_counter
class PostsController
def show
............
@post.increase_visit
end
end
這意味着,每次呈現posts#show
查看實際訪問特定帖子的人,因此您應該增加訪問次數。
如果您需要更靈活和更先進的方法(計算每位用戶的訪問次數或每天等),您可以定義單獨的模型VisitCounter
,這將與您的Post
模型相關聯。
問候
因爲它沒有提到,你也應該籤https://github.com/charlotte-ruby/impressionist,使視圖跟蹤很容易和靈活。
這是保存與每個視圖,並可以得到方便以後數據:
t.string "impressionable_type" # model type: Widget
t.integer "impressionable_id" # model instance ID: @widget.id
t.integer "user_id" # automatically logs @current_user.id
t.string "controller_name" # logs the controller name
t.string "action_name" # logs the action_name
t.string "view_name" # TODO: log individual views (as well as partials and nested partials)
t.string "request_hash" # unique ID per request, in case you want to log multiple impressions and group them
t.string "session_hash" # logs the rails session
t.string "ip_address" # request.remote_ip
t.text "params" # request.params, except action name, controller name and resource id
t.string "referrer" # request.referer
t.string "message" # custom message you can add
因此,舉例來說,你可以查詢是這樣的:「給我供型號和會議分組特定用戶的所有意見「。和這樣的東西。
正如@Deepak建議,你可以在模型中添加一個視場,
def change
add_column :page_views, :count, :integer, default: 0
end
然後,在你controller
在show
行動,
def show
#your show logic
if (user = current_user).present?
current_user.page_views.where(page_id: @page.id).first_or_initialize.increment!(:count)
end
end
這是有道理的,因爲每當頁面被訪問,計數器應該增加1 ..並且您的發佈請求被保存..
讓我們認爲我們有一篇文章的博客。在索引頁面文章名稱中,文章的文本和主題將被打印。因此,我們必須向每篇文章的沒有視圖的索引頁面引入一個新列。
請進行以下更改。
應用程序/視圖/用品/ index.html.erb
添加到表中。
<th>view</th>
添加到數據抽象的部分開始與
<%@articles.each_with_index do |article, index| %> .
<td><%= article.view %></td>
新列物品數據庫視圖
或運行代碼
rails generate migration add_view_to_article view:int
應用程序/控制器/ articles.controller.rb
def show
@article = Article.find(params[:id])
abc = @article.view += 1
@article.update_attribute "view", abc
end
有一個看看'impressionist'寶石:https://開頭github上。 com/charlotte-ruby/impressionist – user000001