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
应引用'
。
希望这适合你!
你是对的,我正在使用rails 2 ...是真的'to_sql'只在rails 3中?我无法得到它的工作...我尝试了你的建议代码,但我得到一个mysql错误,抱怨非独特的表或别名涉及到工作流程... – mmastera
哦,不知道to_sql是在轨道3只要。也许你可以在日志文件中检查生成的sql。我现在正在创建一个测试项目来重建您的问题。 – PeterWong