0

我正在尝试循环浏览最新的“文章” - 例如,最近 30 天内发布的 10 篇。

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

模型/文章.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 的新手),我们将不胜感激!

4

3 回答 3

2

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

在您的Article模型上,您可以创建一个recent如下所示的范围:

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

然后您只需使用即可检索这些文章Article.recent

于 2012-12-03T14:19:27.423 回答
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/

于 2012-12-03T14:27:59.393 回答
0

我想范围在那里对你有用:

http://guides.rubyonrails.org/active_record_querying.html#scopes

€ 迟到 ;)

于 2012-12-03T14:20:57.680 回答