在Ruby on Rails中使用“ includes”子句时,按两个表中的列进行排序

时间:2018-12-20 12:23:37

标签: ruby-on-rails sorting join

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进行排序,但是由于F2MonthForecast表中,因此我不确定如何按该字段进行排序。

请帮助!

2 个答案:

答案 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.*