如何进行许多< - >许多DataMapper集合的交集?

时间:2010-01-05 23:33:12

标签: ruby datamapper intersection

我正在尝试返回与标记主题相关的数据映射集合的交集。

在我们继续前进之前,我应该指出显而易见的事实:

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

这将返回一个UNION,这意味着我将所有主题都以“shim”或“sham”作为标记。

我想要做的是将所有以“shim”和“sham”作为标签的文章归还。

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

好的,我们有数据 - 现在我们还有一个问题。我们需要将它作为DataMapper集合,以便我可以有效地深入了解我的结果:

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

这当然是不可能的,因为@blah现在是一个数组而不是DataMapper Collection。

上述更加简洁的版本:

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

虽然我们最终仍然得到一个阵列..... 根据{{​​3}},这应该是可能的

1 个答案:

答案 0 :(得分:1)

这就是我完成它的方式:

words = query.split /,/

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

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

似乎应该有更简洁的方法来做到这一点,但它确实有效。