Как мне сделать пересечение многих <-> многих DataMapper Collection? - PullRequest
1 голос
/ 06 января 2010

Я пытаюсь вернуть пересечение коллекций картографических данных, связанных с отмеченными темами.

Прежде чем мы пойдем дальше, я должен указать на очевидное:

@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 это должно быть возможно

1 Ответ

1 голос
/ 10 января 2011

Вот как я это делаю:

words = query.split /,/

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

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

Кажется, должен быть более лаконичный способ сделать это, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...