【问题标题】:Rails filtering by last child attributeRails 按最后一个子属性过滤
【发布时间】:2017-09-05 20:05:20
【问题描述】:

我对 active_record 查询有疑问,抱歉,我是 rails 新手。

我有一个模型 Subscription,它有子 SubscriptionVersion,我保存所有可以更新的信息。

在 API 调用(例如获取请求)中,我合并来自订阅和当前版本 (@subscription.subscription_versions.last) 的数据,并提供合并后的哈希值以进行响应,但我遇到了按当前版本中的值排序和过滤的问题。

当我尝试这样做时 @subscriptions.joins(:subscription_versions).order('subscription_versions.version') 它采用所有版本并按最小值排序,即使订阅有 5 个版本并且最新的是第 5 个(current_version)。

所以...谁能给我建议如何在不添加订阅模型current_version_id的新字段的情况下生成查询?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    如果我理解正确,您只想返回最后一个订阅版本?

    根据版本的排序方式,您可以这样做(尚未测试):

    @subscriptions.joins(:subscription_versions).order('subscription_versions.version').first 
    

    @subscriptions.joins(:subscription_versions).order('subscription_versions.version').last
    

    【讨论】:

    • 在这种情况下,它只是从排序集合返回第一个/最后一个订阅,但我需要它总是按最后一个订阅版本排序
    • 啊,那我误解了你的问题。默认情况下,Rails 按升序排序。您可以添加 :desc 以降序排序,如下所示: User.order(email: :desc)
    • 不,我想要通过升序对实例进行排序,订阅 5 个版本 current_version 将排在第 5 位,但它把它放在首位,因为它总是有版本 1 的订阅版本,但我只需要按最新版本
    • 因为默认情况下 Rails 使用升序,这意味着它将从 1 到 5。试试这个:@subscriptions.joins(:subscription_versions).order('subscription_versions.version DESC')
    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多