У меня есть следующие модели, определенные в Rails, с Mongoid:Создание встроенных документов, как представляется, не создают отношения
Class Character
include Mongoid::Document
field :n, as: name, type: String
field :p, as: :positions, type: Array
field :o, as: :roles, type: Array
field :r, as: :resource, type: String
embeds_one :base_stat
end
class BaseStat
include Mongoid::Document
embedded_in :character
end
Я пытаюсь посеять свою базу данных с документами, которые имеют эти отношения 1), потому что Я должен был бы в конце концов и 2), поэтому я могу проверить, правильно ли использую Mongoid. Я пробовал несколько разных способов его засеять, но каждый раз я могу создавать персональные документы, а затем создавать документы BaseStat на основе символьного документа, но вызов character.base_stat возвращает нуль.
Вот вещи, которые я пробовал в дб/seeds.rb, что не бросаете ошибки:
ch = Character.create!([etc])
ch.build_base_stat([etc])
Character.create!(name: value, name: value, base_stat: BaseStat.new(name: value, name:value))
ch = Character.create!([etc])
ch.create_base_stat([etc])
Я также попытался с помощью ch.base_stat.create! (что вызвало ошибку, когда я назвал rake db: setup).
Я знаю, что созданы как документы Character, так и BaseStat, потому что я могу выполнять поиск в консоли Rails для семенных документов Character (a = Character.where (name: value) [0] и b = BaseStat.where (имя: значение) [0]). Но похоже, что отношения не хранятся.
Вызов a.metadata также вызывает NoMethodError.
У меня нет никаких контроллеров, только модели и записи в db/seeds.rb. Я чувствую, что мне не хватает чего-то фундаментального, потому что, ну, я охотился через StackOverflow и не видел ничего, что фиксировало это.
Версии: Mongoid 4.0.0.alpha2 Rails 4.0.1
Weird! Оно делает. В настоящее время у меня есть только одно семя. Не могли бы вы взглянуть на него? 'Character.create! (N:« Aatrox », p: [" top "," jungle "], o: [" offtank "," glass cannon "], r:" health ", stats: BaseStat.new (hp: 395, hp18: 1925, hpr: 5,75, hpr18: 14,75, ad: 55, ad18: 112,6, as: 0,651, as18: 0,983, ar: 14, ar18: 82,4, mr: 30, mr18: 52,5, мс : 345, r: 150)) ' (Я изменил модель персонажа, так что это embeds_one: stats, class_name" BaseStat. "Модель BaseStat по-прежнему встроена: символ) –
Предполагая, что у вас есть все эти поля, добавленные в модель BaseStat, кажется верьте мне. После запуска этого семени вы сможете обнаружить, что BaseStat, выполнив Character.first.stats, работает ли это?Я не думаю, что данные о взаимоотношениях должны храниться для встроенных документов. Это больше похоже на псевдосвязь. –
Нет, вызов Character.first.stats возвращает nil. Странно. (Character.first действительно возвращает правильный результат.) –