Монгоидные вопросы синтаксиса - PullRequest
1 голос
/ 24 ноября 2010

1) Поиск по объекту экземпляра

Предполагается, что у меня есть экземпляр объекта с именем @topic.Я хочу получить ответы на эту тему.Я думал, что смогу передать: themes => @ topic, но мне пришлось сделать очень уродливый запрос ниже.

  @answers = Answers.where(:topic_ids => {"$in" => [@topic.id]})

2) Получение строкового представления идентификатора.У меня есть пользовательская функция (показано ниже).Но разве это не должно быть очень распространенным требованием?

  def sid
    return id.to_s
  end

1 Ответ

2 голосов
/ 25 ноября 2010

Если ваши ассоциации установлены правильно, вы должны сделать следующее:

@topic.answers

Похоже, что то, что вы ищете.Убедитесь, что вы правильно настроили свои ассоциации.Mongoid очень простит при определении ассоциаций, поэтому может показаться, что они настроены правильно, когда на самом деле существует проблема, такая как несовпадение имен в references_many и referenced_in.

Если есть веская причина, по которой вышеуказанное не работает, и вам нужно использовать запрос, вы можете использовать этот простой запрос:

@answers = Answer.where(:topic_ids => @topic.id)

Это будет соответствовать любой записи Answerчьи topic_ids включают предоставленный идентификатор.Синтаксис для полей массива такой же, как и для полей с одним значением, таких как Answer.where(:title => 'Foo').MongoDB будет интерпретировать запрос по-разному в зависимости от того, является ли поле массивом (проверьте, находится ли указанное значение в массиве) или одним значением (проверьте, совпадает ли указанное значение).

Вот немного больше информациио том, как MongoDB обрабатывает запросы к массивам: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

...