Вопрос
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