我看到对ActiveRecord查询执行.first()或.last()查询会返回一个数组,而不是ActiveRecord :: AssociationRelation。这样可以防止我附加.order()子句,因为这不是数组方法。
退一步,我想提取与帖子相关的最新五个(“实时”,即活动)注释,这是失败的代码:
@post.comments.where(status: "live").last(5).order(id: :desc)
错误是
#
的未定义方法`order'
如果删除.last()子句或.order()子句,我会得到一个有效结果,但显然不是我想要的结果集。
按时间倒序获得最后五个实时评论的最佳方法是什么?更重要的是,也许,关于此语法的最佳文档/教程在哪里?我发现the official guide太简短了。
答案 0 :(得分:4)
关于文档,我可以推荐Rails API。每种接口方法都有很多详细的说明。
关于您的问题,您可以使用limit
方法而不是first
或last
:
@post.comments.where(status: "live").limit(5).order(id: :desc)
它不影响结果的类型(保留为ActiveRecord::AssociationRelation
)。因此,如果未找到结果,则与to_a
方法的关系将转换为空数组。这与first
和last
方法的行为不同,后者在没有结果的情况下返回nil
。
答案 1 :(得分:1)
怎么样:
@post.comments.where(status: 'live').order(created_at: :desc).take(5)
我刚刚插入了created_at
。也许您会希望使用updated_at
。