Ruby on Rails - 组合并排序两个不同的activerecord查询

时间:2015-04-10 10:27:06

标签: sorting ruby-on-rails-4

我将两个不同的活动记录查询合并到一个查询中。查询有两个不同的表,并且具有不同的列名。一旦我将两个查询组合在一起,我希望能够将其排序为包含日期的行之一。但是,在" Query1"该日期称为startdate。在" Query2"中,日期称为starts_at。我希望能够使用Query1的select别名将startdate作为starts_at返回,但是在花了两天时间没有解决这个选项(显然选择不起作用)之后,我希望有一种方法对组合查询进行排序,而不必编写自己的排序方法。

例如,我使用的代码类似于:

@Query1 = Course.select(:id,:city,:start_date).where(...)
@Query2 = Workshop.select(:id,:topic,:starts_at).where(...)

@CombinedQuery = Query1 + Query2

我想对@CombinedQuery进行排序,以便日期按升序排列,但是以一种方式将Query1和Query2的结果排序在一起。有没有简单的方法呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

要在Ruby中对@CombinedQuery进行排序,请按以下方式进行:

@CombinedQuery.sort_by do |record|
  if record.respond_to? :startdate
    record.startdate
  elsif record.respond_to? :starts_at
    record.starts_at
  end
end

附注:如果您想遵循ruby命名约定,则应将@Query1@Query1分别重命名为小写@query1@query2@CombinedQuery应更改为snakecase @combined_query