【问题标题】:Rails 5 - Sum of children after applying WHERE to parentRails 5 - 将 WHERE 应用于父级后的子级总和
【发布时间】:2017-05-09 18:39:33
【问题描述】:

在我的 Rails 5 应用程序中,我有乘客、航班和临时演员。

一个乘客有很多航班,一个航班有很多额外的。

航班和额外模型都有一个字段值。

我正在尝试从所有航班(在一个日期范围内)获取所有 Extras 并获取它们的值的总和。

passenger.flights.where(CONDITION).sum(:value)

给我航班价值的总和。

现在我正在尝试做类似的事情

passenger.flights.where(CONDITION).extras.sum(:value)

这当然会给我一个错误:

undefined method `extras' for #<ActiveRecord::AssociationRelation []>

通常我会使用 has_many through 来获取乘客的所有额外信息。但由于我中间有 WHERE 过滤器,所以我不知道该怎么做。

我希望问题变得清晰。

【问题讨论】:

    标签: ruby-on-rails nested-attributes ruby-on-rails-5


    【解决方案1】:

    你应该看看joins

    如果在Passenger模型下,你有has_many :extras, through: :flights,你可以这样做(注意条件只是随机突出table_name.column_name的使用):

    passenger.extras.joins(:flight).where('flights.date &gt; ? or flights.date &lt; ?', some_date, some_other_date).sum(:value)

    【讨论】:

    • 谢谢,返回:无法将“Extra”加入名为“flights”的关联
    • 试试joins(:flight)
    【解决方案2】:
    passenger.flights.where(CONDITION).joins(:extras).sum('extras.value')
    

    【讨论】:

    • 太棒了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多