查找子句中使用关联模型的活动记录查询

时间:2011-07-29 12:27:16

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

我有一个金发碧眼的时刻,可能是大脑冻结。

在我的rails3应用程序中,我有用户和任务。我的用户有很多任务......

我有到期和过期的任务如下:

@due = Task.find(:all, :conditions => ["dueddate >= ? AND AND status = ?", Date.today, false], :include => :taskcategories, :order => "dueddate asc")  

我在任务视图中要做的是列出具有适当任务的用户......

出于某种原因,我无法理解它。我试过这个,但它不起作用:

@task = Task.all

@user = User.find(:all, :conditions => ["@task.dueddate <= ? AND 
@task.status = ?", Date.today + 7.days, false])

我确信这很容易,任何人都可以帮助我!!?

1 个答案:

答案 0 :(得分:6)

我想这应该可行

<强>更新

User.joins(:tasks)
    .where("tasks.dueddate <= ? AND tasks.status = ?", Date.today + 7.days, false).group(:id)

这适用于SQLite和MySQL。但是,PostgreSQL要求您提供表的所有列。如果它是一个小表,您只需键入名称即可。或者您可以将此方法添加到模型中:

def self.column_list
  self.column_names.collect { |c| "#{self.to_s.pluralize.downcase}.#{c}"}.join(",")
end

并将.group(:id)更改为.group(User.column_list)