我正在尝试返回与标记主题相关的数据映射器集合的交集。
在我们进一步讨论之前,我应该指出显而易见的:
@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这应该是可能的