Я пытаюсь вернуть пересечение коллекций картографических данных, связанных с отмеченными темами.
Прежде чем мы пойдем дальше, я должен указать на очевидное:
@tags = Tag.all(:title => ["shim", "sham"])
@tags.topics
Возвращает UNION, что означает, что я получаю все темы с тегами '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 это должно быть возможно