[英]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
方法,而不是first
或last
:
@post.comments.where(status: "live").limit(5).order(id: :desc)
它不影响结果的类型(它停留ActiveRecord::AssociationRelation
)。 因此,如果未找到结果,则与to_a
方法的关系将转换为空数组。 这是从行为不同的first
和last
它会返回方法nil
在没有结果的情况下。
怎么样:
@post.comments.where(status: 'live').order(created_at: :desc).take(5)
我刚刚插入created_at
。 也许您会希望使用updated_at
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.