Rails 5 - 将WHERE应用于父级后的子项总和

时间:2017-05-09 18:39:33

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

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

一名乘客有很多航班,而且有很多额外的航班。

两者,飞行和额外模型都有一个字段值。

我正在尝试从所有航班(在一个日期范围内)获取所有额外费用并获得其价值的总和。

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

给出了航班价值的总和。

现在我正在尝试做类似

的事情
passenger.flights.where(CONDITION).extras.sum(:value)

当然,这给了我一个错误:

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

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

我希望问题变得清晰。

2 个答案:

答案 0 :(得分:0)

你应该看看joins

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

passenger.extras.joins(:flight).where('flights.date > ? or flights.date < ?', some_date, some_other_date).sum(:value)

答案 1 :(得分:0)

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