我有一个管理员信息中心,显示过去24小时,7天,28天等内创建的帖子。
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
我怎么能把它变成一行?如下所示:
def index
@calculatePosts(a) = Post.where(created_at: a.days.ago..DateTime.now).count
end
然后在视图中我可以做到:
=@calculatePosts(1)
或者我需要创建一个新方法吗?
def calculatePosts(a)
@calculatePost = Post.where(created_at: a.days.ago..DateTime.now).count
end
我如何在索引视图中调用它?
答案 0 :(得分:4)
您最好的选择是在Post
模型上创建一个范围。
class Post ...
scope :last_x_days, -> (x) { where(created_at: x.days.ago..Time.zone.now) }
end
然后你可以在你的视图或控制器中真正地调用它。
@last_10_days = Post.last_x_days(10).count
编辑:
你也可以这样做,但是范围是可以链的,所以不鼓励这样做,尽管没有错。
scope :last_x_days_count, -> (x) { where(created_at: x.days.ago..Time.zone.now).count }