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

Jen*_*unt 0 activerecord ruby-on-rails ruby-on-rails-3

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

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

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

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

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

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

@task = Task.all

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

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

bas*_*eck 6

我想这应该有效

更新

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

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

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

.group(:id)改为.group(User.column_list)