Встроенная ссылка не сохранена - PullRequest
2 голосов
/ 09 марта 2011

Под mongoid и рельсами 3 У меня есть коллекция пользователей и коллекция проектов , которые включают в себя множество отношений , модели:

класс пользователя
включить Mongoid :: Document
поле: name,: type => String
referenced_in: отношение,: inverse_of =>: пользователь
конец

класс проекта
включить Mongoid :: Document
поле: название,: тип => строка
embeds_many: отношения
конец

Классовые отношения
включить Mongoid :: Document
поле: тип,: тип => строка
reference_one: пользователь
embedded_in: subject,: inverse_of =>: отношения
конец

Моя проблема в том, что указанный пользователем отношения никогда не сохраняется в отношениях. Например, для следующей команды сохраняется только : тип :

project1 = Project.new (: title => "project1",: Relations => [{: type => "master",: user => "4d779568bcd7ac0899000002"}])

Моя цель - получить проектный документ, подобный этому:

{"_id": ObjectId ("4d77a8b2bcd7ac08da00000f"), "title": "project1", "relations": [
{
"type": "master",
"пользователь": ObjectId ("4d775effbcd7ac05a8000002"),
"_id": ObjectId ("4d77a8b2bcd7ac08da000010")
}
]}

: пользователь никогда не присутствует, я что-то здесь упускаю? Большое спасибо за вашу помощь!

Ted

1 Ответ

1 голос
/ 07 июня 2011

Итак, пара вещей, которые вы можете изменить:

1) Избегайте имени поля «тип», так как это имя магического столбца рельсов, используемое при наследовании одной таблицы.Возможно, измените их на user_type и relations_type.

2) В Mongoid 2.0 и выше вы можете использовать синтаксис Active Model, такой как has_many и own_to вместо ссылок.http://mongoid.org/docs/relations/referenced/1-n.html

3) Для вашего создания вместо назначения user с идентификатором пользователя попробуйте назначить объект пользователя.

project1 = Project.new( :title => "project1", :relationships => [ {:type => "master", :user => User.first} ] )

Или вы можете назначитьuser_id, например, так:

project1 = Project.new( :title => "project1", :relationships => [ {:type => "master", :user_id => "the_use_id_you_want_to_associate"} ] )

К вашему сведению, вам не нужно указывать inverse_of в "referenced_in: relations,: inverse_of =>: user".Просто "referenced_in: Relations" сделает свое дело.

...