ROR:使用参数创建方法

时间:2017-05-10 09:35:34

标签: ruby-on-rails ruby methods

我有一个管理员信息中心,显示过去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

我如何在索引视图中调用它?

1 个答案:

答案 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 }