1

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

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

@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 集合。

上述更简洁的版本:

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

虽然我们仍然得到一个数组.....根据http://www.mail-archive.com/datamapper@googlegroups.com/msg02092.html这应该是可能的

4

1 回答 1

1

这就是我完成它的方式:

words = query.split /,/

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

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

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

于 2011-01-10T04:40:04.393 回答