【问题标题】:How do I do an Intersection of many<-->many DataMapper Collection?如何做许多<-->许多 DataMapper 集合的交集?
【发布时间】:2010-01-05 23:33:11
【问题描述】:

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

在我们继续之前,我应该指出明显的:

@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,这应该是可能的

【问题讨论】:

    标签: ruby datamapper intersection


    【解决方案1】:

    这就是我完成它的方式:

    words = query.split /,/
    
    tags = Tag.all :label.in => words
    
    photos = tags.shift.photos
    tags.each do |tag|
      @items &= tag.photos
    end
    

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

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2021-02-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多