繁体   English   中英

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

[英]Rails 5.2 ActiveRecord query returns array instead of ActiveRecord::AssociationRelation

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

回到目标上一分钟,我想提取与帖子相关的最新五个(“实时”,即活动)注释,这是失败的代码:

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

错误是

#<Array:0x00000011b096c0>的未定义方法`order'

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

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

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

你的问题是什么,你可以使用limit方法,而不是firstlast

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

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

怎么样:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM