2016-07-21 7 views
1

Ich habe ein Post-Modell, und ich möchte eine Art und Weise des Zählens der Anzahl von Zeiten, die ein Post durch die posts_controller besucht wurde implementieren, so dass ich kann Posts nach Anzahl der Aufrufe sortieren. Bisher habe ich eine Migration erstellt eine ‚Ansicht count‘ Spalte durch Post-Modell hinzuzufügen:Wie man einen 'Seitenzähler' in einem Controller in Schienen erstellt

class AddViewcountToPosts < ActiveRecord::Migration 
    def change 
    add_column :posts, :view_count, :integer 
    end 
end 

Ich mag im Grunde etwas in den Posts zeigen Methode ein auf die view_count Spalte die Show Aktion jedes Mal hinzufügen wird zugegriffen.

Jede Hilfe wäre sehr dankbar :)

+1

Sie haben 70% der Lösung direkt in der Frage. Sie müssen nur Ihre Worte im Code ausdrücken. :) Es scheint, dass Sie mit Datenbanken/Modellen nicht sehr vertraut sind. In diesem Fall hilft das (Neu-) Lesen der Rails Tutorial. Fügen Sie dazu –

Antwort

2

Sie können nur diesen Zähler erhöhen in Ihrem show Aktion.

def show 
    # ... 
    @post.increment!(:view_count) 
end 

keine Magie hier :)

+0

hinzu, fügen Sie Ihrer Migration einen Standardwert von "0" hinzu: 'add_column: posts,: view_count,: integer, default: 0' – oreoluwa

+2

http://apidock.com/rails/ActiveRecord/Persistence/ increment Initialisiert das Attribut auf Null, wenn nil, und addiert den übergebenen Wert als (Standardwert ist 1). –

+0

Awesome, wusste nicht, dass es so einfach wäre! Konnte nichts finden, wenn ich google nach ähnlichen Lösungen suche, also denke ich, dass ich die falschen Wörter benutzte, danke :) – Rixcy

0

Verwenden Schienen increment um dies zu erreichen

class PostsController < ApplicationController 
    before_filter :find_post, only: [:show] 
    before_filter :increment_view_count, only: [:show] 

    def show 
    # ... 
    end 

    private 

    def find_post 
    @post = Post.find(params[:id]) 
    end 

    def increment_view_count 
    @post.increment(:view_count) 
    end 
end 
Verwandte Themen