Account.includes(:month_forecasts)
.where(month_forecasts: { field: :value })
我有上面的includes
子句。我在F1
表中有两个字段Account
,在F2
表中有MonthForecast
。我需要通过这两个字段对以上结果进行排序。
Account.includes(:month_forecasts)
.where(month_forecasts: { field: :value }).order(:f1)
我知道上面的内容将按F1
进行排序,但是由于F2
在MonthForecast
表中,因此我不确定如何按该字段进行排序。
请帮助!
答案 0 :(得分:2)
我将使用joins
进行此关联,如果与month_forecasts
的关联并非针对所有数据,则它将仅具有相关的结果链接。还要保留order
中描述的字段,这将有助于下次阅读。
Account.joins(:month_forecasts).where(
month_forecasts: { field: :value }).order('accounts.f1, month_forecasts.f2')
答案 1 :(得分:1)
只需将字段名称用作字符串
(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>(?:(?!<br \/>\[(Lunch|Dinner)\]).)+))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>(?:(?!<br \/>\[Dinner).)+))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
请注意,您需要使用Account.left_outer_joins(:month_forecasts)
.where(month_forecasts: { field: :value }).order('f1, month_forecasts.f2')
(或者如果您不想看到没有预测的帐户,则使用left_outer_joins
)来代替joins
进行
更新:
默认情况下,它仅选择includes
,但是您可以添加第二个表中所有列的选择
accounts.*