2017-05-10 1 views
1

Ich habe eine Admin-Dashboard, die Beiträge erstellt in den letzten 24 Stunden zeigt, 7 Tage, 28 Tage usw.ROR: eine Methode mit einem Parameter Erstellen

def index 
    @1DayPosts = Post.where(created_at: 1.days.ago..DateTime.now).count 
    @7DaysPosts = Post.where(created_at: 7.days.ago..DateTime.now).count 
    @28DaysPosts = Post.where(created_at: 28.days.ago..DateTime.now).count 
end 

Wie kann ich diese in eine Linie? So etwas wie die folgende Liste:

def index 
    @calculatePosts(a) = Post.where(created_at: a.days.ago..DateTime.now).count 
end 

Dann in der Ansicht, die ich tun könnte:

[email protected](1) 

Oder brauche ich, um eine neue Methode zu erstellen?

def calculatePosts(a) 
    @calculatePost = Post.where(created_at: a.days.ago..DateTime.now).count 
end 

Wie würde ich das dann in der Indexansicht aufrufen?

Antwort

4

Ihre beste Wette wäre, einen Bereich auf dem Modell Post zu erstellen.

Dann können Sie das wirklich überall anrufen, in Ihrer Ansicht oder Controller wie folgt.

@last_10_days = Post.last_x_days(10).count 

EDIT:

Sie tun dies auch können, aber Bereiche sollen Ketten der Lage sein, so dass diese abgeraten, nicht falsch though.

scope :last_x_days_count, -> (x) { where(created_at: x.days.ago..Time.zone.now).count } 
+0

danke für die Lösung! Ist es besser, '@ last_10_days = Post.last_x_days (10) .count' im Controller aufzurufen und dann in der Ansicht' 'last_10_days' 'aufzurufen? Oder ist es besser, einfach '@ last_10_days = Post.last_x_days (10) .count' in der Ansicht aufzurufen? Oder spielt es keine Rolle? – BigL

+0

Ist nicht wirklich wichtig, Sie können einfach 'Post.last_x_days (10) .count' in der Ansicht direkt aufrufen, brauchen nicht wirklich' @ last_10_days', es sei denn, Sie verwenden es an mehreren Stellen in der Ansicht. – Iceman

Verwandte Themen