Ruby 如何进行多个交叉<--&燃气轮机;许多数据映射器集合?

Ruby 如何进行多个交叉<--&燃气轮机;许多数据映射器集合?,ruby,datamapper,intersection,Ruby,Datamapper,Intersection,我试图返回与标记主题相关的datamapper集合的交集 在我们进一步讨论之前,我应该指出显而易见的一点: @tags = Tag.all(:title => ["shim", "sham"]) @tags.topics 这将返回一个UNION,这意味着我得到的所有主题都以“shim”或“sham”作为标记 我想做的是返回所有带有“shim”和“sham”标记的文章 @tags = Tag.all(:title => ["shim","sham"]) @blah = [] @bla

我试图返回与标记主题相关的datamapper集合的交集

在我们进一步讨论之前,我应该指出显而易见的一点:

@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
这当然是不可能的,因为@blah现在是一个数组,而不是数据映射器集合

以上内容的更简洁版本:

@topics = Tag.all(:title => ["shim"]).topics & Tag.all(:title => ["sham"]).topics
虽然我们最终还是得到了一个数组。。。。。
根据这一点,这应该是可能的

我就是这样做到的:

words = query.split /,/

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

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

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

我就是这样做到的:

words = query.split /,/

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

photos = tags.shift.photos
tags.each do |tag|
  @items &= tag.photos
end
似乎应该有一种更简洁的方法来做到这一点,但它是有效的