将SQL语句转换为Arel Rails查询

时间:2017-05-26 23:44:54

标签: sql ruby-on-rails postgresql arel

所以,让我们直截了当:我几天都在努力转换这个SQL语句:

select * from (
    select distinct on (program_id) editions.*, programs.* 
    from editions inner join programs on editions.program_id = programs.id 
    where programs.station_id = 1) as editionsprograms 
order by fixed desc, published_at desc, time desc 
limit 4;

到Arel rails查询。有人知道如何制作一个与上述SQL具有相同效果的Arel查询?

2 个答案:

答案 0 :(得分:1)

您可以使用from方法完成查询中棘手的部分(从子查询中选择)。子查询本身应该是一个简单的映射(selectjoinswhere等。所以结果会是这样的:

Edition.select('*')
.from(
  Editions.select('DISTINCT ON (program_id) editions.*, programs.*')
          .joins(:programs)
          .where(programs: { station_id: 1 })
)
.order(fixed: :desc, published_at: :desc, time: :desc)
.limit(4)

这将返回版本记录,其中包含存储在每个记录上的程序记录中的其他数据。为了避免结果类型的怪异,这也可能只是抛出错误而无法解决,你可以直接使用Arel(类似的语法)或者在末尾使用.pluck来只选择你真正需要的列。

答案 1 :(得分:0)

最近我发现了这个很棒的项目 http://www.scuttle.io/
scuttle - sql to arel converter