2012-01-03 58 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