Rails 5.2 ActiveRecord查询返回数组,而不是ActiveRecord :: AssociationRelation

时间:2018-10-15 23:10:40

标签: sql ruby-on-rails activerecord

我看到对ActiveRecord查询执行.first()或.last()查询会返回一个数组,而不是ActiveRecord :: AssociationRelation。这样可以防止我附加.order()子句,因为这不是数组方法。

退一步,我想提取与帖子相关的最新五个(“实时”,即活动)注释,这是失败的代码:

@post.comments.where(status: "live").last(5).order(id: :desc)

错误是

  

的未定义方法`order'

如果删除.last()子句或.order()子句,我会得到一个有效结果,但显然不是我想要的结果集。

按时间倒序获得最后五个实时评论的最佳方法是什么?更重要的是,也许,关于此语法的最佳文档/教程在哪里?我发现the official guide太简短了。

2 个答案:

答案 0 :(得分:4)

关于文档,我可以推荐Rails API。每种接口方法都有很多详细的说明。

关于您的问题,您可以使用limit方法而不是firstlast

@post.comments.where(status: "live").limit(5).order(id: :desc)

它不影响结果的类型(保留为ActiveRecord::AssociationRelation)。因此,如果未找到结果,则与to_a方法的关系将转换为空数组。这与firstlast方法的行为不同,后者在没有结果的情况下返回nil

答案 1 :(得分:1)

怎么样:

@post.comments.where(status: 'live').order(created_at: :desc).take(5)

我刚刚插入了created_at。也许您会希望使用updated_at