14

在我的应用程序中,我创建了一个最近发布的功能。

 @recentposts = Post.all(:order => 'created_at DESC', :limit => 5)

这个变量会带来一些麻烦。当我运行测试时,出现以下错误:

弃用警告:Relation#all 已弃用。如果你想预先加载一个关系,你可以调用#load(例如Post.where(published: true).load)。如果要从关系中获取记录数组,可以调用#to_a(例如Post.where(published: true).to_a)。(从 /home/mateusz/rails4/Bloggers/app/controllers/users_controller.rb:18 的节目中调用)

我在谷歌上搜索解决方案,但我没有找到它......

4

3 回答 3

19

写吧:

@recentposts = Post.order('created_at DESC').limit(5)

to_a不是明确需要的,因为数据在需要时是延迟加载的。

于 2013-08-13T08:32:41.307 回答
10

调用Post.all将返回一个ActiveRecord::Relation,默认情况下会延迟加载。调用Post.all.load将返回一个热切加载的ActiveRecord::Relation. 最后,调用Post.all.to_a将返回数组中的所有记录。

在你的情况下,你会这样做:

Post.order('created_at DESC').limit(5).to_a

这将返回前 5 个帖子的数组,按created_at降序排序。

于 2013-08-13T08:12:12.210 回答
2

嵌套方式

Post.order('created_at DESC').limit(5).to_a
于 2013-08-13T08:23:45.680 回答