Rails - activerecord在“many”一侧使用has_many关系和条件查找

问题描述:

我是一个完整的业余爱好者,我确信这很容易......但我被卡住了。我有一个简单的情况,我有一个“活动”表,每个活动可以有很多“工作流程”或状态导致最终完成,我需要在控制器中执行activerecord查找,以便我结束了没有包含的状态字段“已完成”Rails - activerecord在“many”一侧使用has_many关系和条件查找

class Activity < ActiveRecord::Base 
    has_many :workflows 

class Workflow < ActiveRecord::Base 
    belongs_to :activity 

在控制器的任何工作流活动:

Activity.all(:include => :workflows, :conditions => workflows.status != 'COMPLETED') 

这是工作到一定程度,但不是给我的只有activites没有任何状态为“C”的工作流程OMPLETED“,只要该活动还有其他非完成工作流程,我就会收到包含具有COMPLETED工作流的活动的结果......希望这是有道理的。

底线,我怎么能回到其工作流程的活动,不管有多少可能,不包括状态为“已完成:?

谢谢!

你试图查看生成的通过使用.to_sql sql语句

我想下面应该工作:

Activity.all(:include => :workflows, :joins => :workflows, :conditions => "workflows.status != COMPLETED") 

(您正在使用的轨道2查找呃语法,所以我想你不使用Rails 3,对吧?)

====== UPDATED ======

Activity.all(:include => :workflows, :conditions => "workflows.status != 'COMPLETED'") 

好像轨2将会做外部联接对于:include,所以不需要再使用:joins

此外,COMPLETED应引用'

希望这适合你!

+0

你是对的,我正在使用rails 2 ...是真的'to_sql'只在rails 3中?我无法得到它的工作...我尝试了你的建议代码,但我得到一个mysql错误,抱怨非独特的表或别名涉及到工作流程... – mmastera

+0

哦,不知道to_sql是在轨道3只要。也许你可以在日志文件中检查生成的sql。我现在正在创建一个测试项目来重建您的问题。 – PeterWong