2011-08-22 79 views
1

我是一個完整的業餘愛好者,我確信這很容易......但我被卡住了。我有一個簡單的情況,我有一個「活動」表,每個活動可以有很多「工作流程」或狀態導致最終完成,我需要在控制器中執行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工作流的活動的結果......希望這是有道理的。

底線,我怎麼能回到其工作流程的活動,不管有多少可能,不包括狀態爲「已完成:?

謝謝!

回答

3

你試圖查看生成的通過使用.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