2010-11-24 1 views
1

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

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

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

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

def sid 
    return id.to_s 
    end 

ответ

2

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

@topic.answers 

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

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

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

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

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

+0

хммм, пример вы дали, кажется, не работает - я делаю что-то неправильно? @answers = @ user.answers.where (: topic_ids.in => @ topic.id) – 2010-12-05 05:56:02