2013-04-08 47 views
0

我:軌SQL查詢

User id:integer name:integer 
class User 
has_many :complete_tasks 
end 

Task id:integer style:string uid:string 

CompleteTask id:integer style:string uid:string user_id:integer 
class CompleteTask 
belongs_to :user 
end 

我在DB

user = User.first 

ID一些記錄:1名:田園

tasks = Tasks.all 

ID:1種類型=>「運行「uid =>」river「

id:2 style =>」jump「uid =>」sea「

ID:3風格=> 「運行」 的uid => 「海」

ID:4風格=> 「運行」 的uid => 「河」

ID:5風格=>「運行「UID =>」 森林 「

user.complete_tasks.all 

ID:1種類型=> 」運行「 的uid => 」河「 USER_ID => 1

ID:2樣式=> 」跳「 的uid =>」海「user_id => 1

如何從Task中獲取記錄,其中字段:style和:uid在模型CompleteTask中不是等效字段:style和:uid。

+0

有什麼用'id3'和任務之間的區別'id5'相比其他的呢? – Zippie 2013-04-08 18:43:57

+0

我想獲取所有記錄任務,其中字段:style和:uid與模型CompleteTasks中的字段:style和:uid不一致。 – user2232650 2013-04-08 19:00:20

+0

我唯一想做的事情就是製作兩個/ for循環,然後比較它。這是一個非常差的數據庫模型 – Zippie 2013-04-08 19:31:07

回答

0

這是一個貧窮的數據庫模型,我會建議使用別的東西。也許是像task模型那樣的布爾值或sm​​thng,因此您可以檢查它是否完整。 不管怎麼說,這裏是一個解決方案:

all_tasks = Task.all 
complete_tasks = CompleteTask.all 

complete_tasks.each do |complete_task| 
    #find if there is a task with the corresponding uid and style in the complete tasks 
    tasks = all_tasks.where(:uid => complete_task.uid, :style => complete_task.style) 
    #remove it from all_tasks (all_tasks means tasks that haven't finished yet) 
    all_tasks = @all_tasks - tasks 
end 

return all_tasks 
+0

謝謝,我會考慮如何改變。 – user2232650 2013-04-08 19:47:29

+0

沒問題,如果你寫下你如何執行一切,也許我可以幫你 – Zippie 2013-04-08 19:48:33

0

如果我正確地理解了你,你試圖找到所有沒有與完成任務相同的ID的任務。

對於您應該使用find condition --something,如:

Task.find(:all, :conditions => { :complete => false });