在我的Rails 5应用程序中,我有乘客,航班和演员。
一名乘客有很多航班,而且有很多额外的航班。
两者,飞行和额外模型都有一个字段值。
我正在尝试从所有航班(在一个日期范围内)获取所有额外费用并获得其价值的总和。
passenger.flights.where(CONDITION).sum(:value)
给出了航班价值的总和。
现在我正在尝试做类似
的事情passenger.flights.where(CONDITION).extras.sum(:value)
当然,这给了我一个错误:
undefined method `extras' for #<ActiveRecord::AssociationRelation []>
通常我会使用has_many来获取乘客的所有额外费用。但由于我之间有WHERE过滤器,我不知道该怎么做。
我希望问题变得清晰。
答案 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')