2017-05-26 2 views
0

Ich habe eine einfache Rails-App, wo Benutzer sich anmelden und Updates veröffentlichen können, was ich tun möchte, ist eine Zählung in jedem Beitrag hinzufügen, wenn jemand einen Beitrag besucht, wird es aktualisiert angenommen, wenn 100 Benutzer einen bestimmten Beitrag besucht, sollte es die Anzahl zeigen zu hundert.Wie können Seitenansichten von Benutzern in Schienen gezählt werden?

Ich hatte impressionist gesehen, aber ich dachte, dies zu tun, ohne einen Edelstein zu verwenden.

ich dachte, der Schaffung einer anderen ModalPostView

class PageView 
    belongs_to :page 
    belongs_to :user 
end 
+1

Werfen Sie einen Blick auf die 'impressionist' Juwel laufen: https: // GitHub. com/charlotte-ruby/impressionist – user000001

Antwort

1

Sie können einen Blick auf Feld in dem Modell hinzufügen und erhöhen es auf jeder Seite Ansicht

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

und

# 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 

Und fügen Sie einfach eine Route in den Seiten controlle hinzu r

# routes.rb 
resources :pages do 
    post :increment 
end 
+1

Sie sollten die bang '!' Version der 'increment' Methode verwenden, oder die Aufzeichnung wird nicht gespeichert. https://apidock.com/rails/ActiveRecord/Base/increment! –

+0

Danke @ Зелёный hat die Antwort bearbeitet –

+0

Sie brauchen nicht einmal eine andere Route dafür .. –

0

Grundsätzlich können Sie zusätzliches Feld hinzufügen zu schreiben, wie visit_counter:

class Post 
    def increase_visit 
    visit_counter+=1 
    save! 
    end 
end 

Dann in posts_controller#show, können Sie einige Schritt tun:

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

Das heißt, jedes Mal, Render posts#show sehen jemand tatsächlich besuchte bestimmte Post, so sollten Sie die Anzahl der Besuche erhöhen.

Falls Sie einen flexibleren und fortschrittlicheren Ansatz benötigen (um Besuche pro Benutzer oder pro Tag usw. zu zählen), können Sie das separate Modell VisitCounter definieren, das Ihrem Modell Post zugeordnet ist.

Grüße

1

Da es noch nicht erwähnt wurde, sollten Sie auch https://github.com/charlotte-ruby/impressionist Kasse, die sehr einfach und flexibel Ansicht Tracking macht.

Dies sind die Daten, die mit jeder Ansicht gespeichert und kann später praktisch erhalten:

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 

So zum Beispiel könnte man so etwas fragen: „Gib mir alle Ansichten für einen bestimmten Benutzer von Modell und Sessions gruppiert . " und solche Sachen.

0

Wie @Deepak vorgeschlagen, können Sie einen Blick auf Feld im Modell hinzufügen,

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

in Ihrer controller in show Aktion,

Dann
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 

Dies macht Sinn, weil, wenn die Seite wird besucht, Zähler soll um 1 erhöht werden. und Ihre Beitragsanfrage wird gespeichert.

0

Denken wir, wir haben einen Blog mit Artikeln. In der Indexseite werden der Artikelname, der Text und das Thema des Artikels gedruckt. So müssen wir eine neue Spalte zur Indexseite einführen, die keine Ansichten eines jeden Artikels enthält.

Folgende Änderungen vornehmen.

app/view/articles/index.html.erb

  1. der Tabelle hinzufügen.

    <th>view</th> 
    
  2. an den abstrakten Datenstartteil hinzufügen, mit

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

eine neue Spalte Artikel-Datenbank als Ansicht hinzufügen

  1. Wenn Sie MySQL verwenden Sie können Fügen Sie die Spalte manuell als Ansicht hinzu, und geben Sie den Standardwert 0 an.
  2. oder den Code

    rails generate migration add_view_to_article view:int 
    

app/Controller/articles.controller.rb

def show 
@article = Article.find(params[:id]) 
abc = @article.view += 1 
@article.update_attribute "view", abc 
end 
Verwandte Themen