2012-01-03 59 views
0

我有一個代表參加(因爲連接具有屬性)的模型來實現一個的habtm關係:與加入模型rails habtm - 如何找到未鏈接的記錄?

class Person 
    has_many :person_photos 
end 

class PersonPhoto 
    # has a person and a photo id, and a couple of 
    # other attributes that aren't relevant 
end 

class Photo 
    has_many :person_photos 
end 

我想一個方法添加到照片類獲取的人是一個列表不是在那張照片。對於我的生活,我無法弄清楚。這很容易嗎?

回答

1

問題#1試試,也許,在你的照片模型......

def people_not_tagged 
    People.where("id NOT IN (?)", people_ids.empty? ? "" : people_ids) 
end 
+0

我喜歡這個的簡單性,但它生成的SQL是:SELECT'people'。* FROM'people' WHERE(id NOT IN 1,2)和barfs。 – 2012-01-04 03:28:46

+0

啊 - 包括括號?它的工作原理! (我編輯瞭解決它的答案。)謝謝! – 2012-01-04 03:32:38

+0

哦,我認爲我們同時編輯。 :-) – 2012-01-04 03:33:22

0

你可以通過person_photos嘗試讓人擁有has_many照片,並通過person_photos來照片has_many人。

has_many through

Rails的文檔然後photo.find(1)。人們會然後,使用陣列減法people_not_in_photo = People.all列出所有的人在照片1

- photo.find(1)。我想,人們會給你你想要的東西。在subtracting arrays

+0

'people_not_in_photo = People.all - photo.find(1).people'。因爲它真的很重,對吧?也許'people_not_in_photo = People.select(:id).map(&:id) - photo.find(1).people_ids'會好一點。但是,如果有很多用戶,我認爲這不是一個可行的解決方案。 – Robin 2012-01-03 17:35:39

+0

是的,你的答案更好! – Edward 2012-01-04 13:57:13