循环遍历最近的对象:Rails上的Rails

时间:2012-12-03 14:11:27

标签: ruby-on-rails ruby

我正在尝试循环播放最近的“文章” - 比如说,最近30天内最近发布了10篇文章。

我是否应该在文章模型中创建一个方法,如下所示:

模型/ articles.rb

def recent
  self.where('created_at > ?', Time.now-30.days.ago)
end

然后在我的观点中调用它?

视图

@articles.each do |article|
   link_to article.title, Article.recent    
end

这当然不起作用。

如果已经回答了这个问题(也许我使用了错误的搜索条件 - 对stackoverflow来说是新的),我们非常感谢方向!

3 个答案:

答案 0 :(得分:2)

Scopes检查这样的事情是件好事。查看链接here以了解有关它们的更多信息。

Article模型上,您可以像这样创建一个名为recent的范围:

Class Article < ActiveRecord::Base
  scope :recent, lambda { where("created_at < ?", TimeZone.now) }
end

然后,您只需使用Article.recent

即可检索这些文章

答案 1 :(得分:2)

我认为应该在一个方法中,而是一个类方法。我个人更喜欢这种方法而不是范围的方法。

def self.recent
  where('created_at > ?', Time.now-30.days.ago).order("created_at desc").first(10)
end

在您的控制器中,您可以使用

设置@recent_articles
@recent_articles = Article.recent

查看您将执行

@recent_articles.each do |article|
  link_to article.title, article_path(article) # use your proper route method here.
end

推荐(注明日期)阅读:http://www.railway.at/2010/03/09/named-scopes-are-dead/

答案 2 :(得分:0)