2017-05-26 100 views
0

我有一個簡單的rails應用程序,用戶可以登錄和發佈更新我想要做的就是在每篇文章中添加一個計數,所以如果有人訪問一個帖子,它會得到更新假設如果100個用戶訪問了一個特定的帖子,它應該顯示計數到一百。如何計算用戶在rails中的頁面瀏覽量?

我曾經見過印象派,但是我想這樣做,而不使用寶石。

我想創造另一個莫代爾PostView

class PageView 
    belongs_to :page 
    belongs_to :user 
end 
+1

有一個看看'impressionist'寶石:https://開頭github上。 com/charlotte-ruby/impressionist – user000001

回答

1

您可以在模型中添加一個視場,並增加它在每個頁面視圖

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 
+1

你應該使用'increment'方法的'b'版本,否則記錄不會被保存。 https://apidock.com/rails/ActiveRecord/Base/increment! –

+0

Thanks @Зелёный編輯答案 –

+0

你甚至不需要不同的路線。 –

0

基本上你可以增加額外的現場張貼,像visit_counter

class PostsController 
    def show 
    ............ 
    @post.increase_visit 
    end 
end 

這意味着,每次呈現posts#show查看實際訪問特定帖子的人,因此您應該增加訪問次數。

如果您需要更靈活和更先進的方法(計算每位用戶的訪問次數或每天等),您可以定義單獨的模型VisitCounter,這將與您的Post模型相關聯。

問候

1

因爲它沒有提到,你也應該籤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 

因此,舉例來說,你可以查詢是這樣的:「給我供型號和會議分組特定用戶的所有意見「。和這樣的東西。

0

正如@Deepak建議,你可以在模型中添加一個視場,

def change 
    add_column :page_views, :count, :integer, default: 0 
end 

然後,在你controllershow行動,

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 ..並且您的發佈請求被保存..

0

讓我們認爲我們有一篇文章的博客。在索引頁面文章名稱中,文章的文本和主題將被打印。因此,我們必須向每篇文章的沒有視圖的索引頁面引入一個新列。

請進行以下更改。

應用程序/視圖/用品/ index.html.erb

  1. 添加到表中。

    <th>view</th> 
    
  2. 添加到數據抽象的部分開始與

    <%@articles.each_with_index do |article, index| %> . 
    
    <td><%= article.view %></td> 
    

新列物品數據庫視圖

  1. 如果你正在使用MySQL,你可以添加手動添加列作爲視圖,使默認值爲0.
  2. 或運行代碼

    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 
相關問題