使用Rails / AR生成此复杂查询

时间:2011-04-04 20:12:16

标签: ruby-on-rails ruby-on-rails-3 orm activerecord

在尝试解决分组和排序问题时(原始问题:"Complex" grouping and indexing in rails?),我得到了一个SQL查询,它将以正确的方式获取正确的记录。

我现在的问题是:如何使用Rails / AR synthax生成此SQL查询?

SQL查询如下:

SELECT
u.id as owner_id, u.name as owner_name, t.id, t.due_date
FROM users u
INNER JOIN tasks m ON u.id = m.owner_id
INNER JOIN tasks t ON u.id = t.owner_id
GROUP BY u.id, u.name, t.id, t.due_date
ORDER BY MIN(m.due_date), t.due_date

1 个答案:

答案 0 :(得分:0)

我认为你需要使用你的数据库和这些属性来使它恰到好处,但你可以试试这样的事情。

class User < ActiveRecord::Base
   has_one :next_task, :class_name => :task, :order => "due_date desc", :limit => 1
   has_many :tasks, :order => "due_date desc"

end

class Task < ActiveRecord::Base
    belongs_to :user

end

User.include([:next_task,:tasks]).order("task.due_date desc").tasks.each { |task|
      puts task.user.owner_id 
      puts task.user.owner_name
      puts task.due_date
}

我不确定用于对用户进行排序的order子句......你必须检查生成的SQL以确切地确定需要什么。