我将两个不同的活动记录查询合并到一个查询中。查询有两个不同的表,并且具有不同的列名。一旦我将两个查询组合在一起,我希望能够将其排序为包含日期的行之一。但是,在" 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的结果排序在一起。有没有简单的方法呢?
谢谢!
答案 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