2016-09-24 2 views
0

Ich habe dies bisher. Ich möchte den Zähler jedes Mal erhöhen, wenn eine GET-Anfrage an den Zähler # add gesendet wird. Was mache ich falsch?Zähler bei Seitenaufruf in Rails erhöhen

class CounterController < ApplicationController 
    def initialize 
    @counter = 0 
    end 

    def home 
    end 

    def add 
    @counter += 1 
    end 
end 

Antwort

1

Jede bekommen Anfrage eine neue Instanz von CounterController ist, so beginnt es immer bei Null. Dies ist der Grund, warum Sie beim Erstellen einer Instanzvariable wie @post bei der nächsten Anfrage nicht vorhanden sind. @counter ist nur ein weiteres Beispiel dafür.

Eine Alternative könnte es sich um eine Instanz der Klasse zu machen ...

class CounterController < ApplicationController 

    @counter = 0 

    def self.add 
    @counter += 1 
    end 

    def self.counter 
    @counter 
    end 

    def home 
    end 

    def add 
    class.add 
    end 

    def show_counter 
    class.counter 
    end 

end 
+0

Dank Steve! Ich folgte deinem Beispiel und änderte einige Dinge. –

+0

In Ruby wird @@ Variablenname für die Klassenvariable und @ Variablenname für den Variablennamen der Instanz verwendet. –

+0

@ c0de222 mit der Ausnahme, dass jede Klasse eine Instanz einer Superklasse ist und daher eigene Instanzvariablen haben kann, die als Klasseninstanzvariablen bezeichnet werden. Diese Antwort erklärt es gut. http://stackoverflow.com/a/15773671/2516474 – SteveTurczyn

Verwandte Themen