Rails 4关系#所有弃用

时间:2013-08-13 08:02:02

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

在我的应用中,我创建了最近的帖子功能。

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

这个变量有些麻烦。当我运行测试时,我有以下错误:

  

DEPRECATION WARNING:不推荐使用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上的节目)

我在Google上搜索解决方案,但我找不到它......

3 个答案:

答案 0 :(得分:19)

只需写下:

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

to_a并非显式必要,因为数据在需要时会延迟加载。

答案 1 :(得分: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降序排序。

答案 2 :(得分:2)

嵌套方式

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