我正在尝试循环播放最近的“文章” - 比如说,最近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来说是新的),我们非常感谢方向!
答案 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)