2010-01-05 2 views
1

태그가 지정된 주제와 관련된 datamapper 콜렉션의 교차를 리턴하려고합니다. 우리가 더 진행하기 전에많은 교차점을 수행하려면 어떻게해야합니까? <--> 많은 DataMapper Collection?

나는 명백한을 지적한다 :

@tags = Tag.all(:title => ["shim", "sham"]) 
@tags.topics 

이 내가 태그로 '심'또는 '가짜'중 모든 항목을 얻을 의미 UNION을 반환합니다.

내가하고 싶은 것은 'shim'과 'sham'이 모두 태그 인 모든 기사를 반환하는 것입니다.

@tags = Tag.all(:title => ["shim","sham"]) 
@blah = [] 
@blah << @tags.topics.first 
@tags.each do |tag| @blah = @blah & tag.topics end 

좋아, 우리는 아직 한 가지 문제가 있습니다. @blah 이제 배열이 아닌 DataMapper 컬렉션이기 때문에 물론

@topics = @blah(:order => [:created_at.desc], :limit => limit, :offset => offset) 

이 불가능

: 내가 지금처럼 효과적으로 내 결과를 드릴 다운 할 수 있도록 우리는 DataMapper의 컬렉션으로이 있어야합니다.

위의 더 간결 버전 : 우리는 여전히 배열로 끝날지라도

@topics = Tag.all(:title => ["shim"]).topics & Tag.all(:title => ["sham"]).topics 

가 ..... 이 http://www.mail-archive.com/[email protected]/msg02092.html에 따라이 가능해야한다는

답변

1

이 난 어떻게 그것을 성취하십시오 :

words = query.split /,/ 

tags = Tag.all :label.in => words 

photos = tags.shift.photos 
tags.each do |tag| 
    @items &= tag.photos 
end 

이렇게하는 것이 더 간결한 방법이어야하는 것처럼 보이지만 작동합니다.

관련 문제