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

わかりました、データはありますが、まだ 1 つの問題があります。これを 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 に答える