Вопрос

1) найти объект экземпляра

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

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

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

  def sid
    return id.to_s
  end
Это было полезно?

Решение

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

@topic.answers

Похоже, то вышесказанное это то, что вы ищете. Убедитесь, что вы правильно настроили свои ассоциации. Мондоид очень прощает, когда определяет ассоциации, поэтому может показаться, что они настроены, когда есть на самом деле проблема, как несоответствующие имена в 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-valueInArrarray

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top