Mongoid 4 находит встроенные документы по ID

У меня есть проект, который является моим первым серьезным погружением в Mongoid.

Я видел совет по использованию следующей команды:

Parent.where('childrens._id' => Moped::BSON::ObjectId(params[:id])).first

Но это не работает. Сообщение об ошибке:

NameError: uninitialized constant Moped::BSON

Я обнаружил, что BSON больше не включен, поэтому я добавил его в свой Gemfile, как и Moped. Затем я сделал еще одно найденное исправление (поместив Moped::BSON=BSON в application.rb).

Это все еще не сработало, но ошибка изменилась на:

NoMethodError: undefined method `ObjectId' for BSON:Module

Поэтому я предполагаю, что этот метод устарел или что-то в этом роде. У кого-нибудь есть другие советы?

Чтобы было ясно, я нахожусь в ситуации, когда хочу сортировать встроенные документы с помощью jquery-sortable. Это требует, чтобы я обновил их в базе данных, но сериализация из этого не включает родительский документ в хэш. Поэтому я решил попытаться получить его на серверной части, используя идентификатор из встроенного документа. Вот почему мне это нужно.

Еще раз спасибо за любую помощь, которую вы можете предоставить.


person Mylan Connolly    schedule 22.04.2014    source источник


Ответы (2)


Попробуйте просто:

Parent.where('childrens._id' => params[:id]).first
person cortex    schedule 28.04.2014
comment
Я еще немного покопался с тех пор, как опубликовал этот вопрос, и похоже, что ваше предложение должно сработать. При этом требования изменились, и теперь идентификаторы для всех моделей представляют собой не ObjectId, а удобочитаемые строки. Спасибо за ответ, но я обновлю свой вопрос. - person Mylan Connolly; 28.04.2014

Я решил вопрос, хотя это не очень поможет людям в будущем. Требования изменились, и теперь я использую удобочитаемые строки в качестве идентификаторов, чтобы помочь в понятных URL-адресах и некоторых других вещах.

Поэтому у меня нет проблем с ObjectIds. Решение Cortex должно (из того, что я прочитал) работать с ObjectId, но я не могу проверить это сейчас.

person Mylan Connolly    schedule 28.04.2014