Я пытаюсь использовать модели пространства имен с Mongoid и не могу заставить его работать.
У меня есть следующие модели: Achievement, Flag, FlagCaptured
Достижение - это базовый класс для FlagCaptured.
Приложение / модели / achievement.rb
class Achievement
include Mongoid::Document
include Mongoid::Timestamps::Created
belongs_to :team
end
приложение / модели / flag.rb
class Flag
include Mongoid::Document
field :name, :type => String
field :key, :type => String, :default => SecureRandom.base64
field :score, :type => Integer
belongs_to :achievement, :class_name => "Achievements::FlagCaptured"
validates :name, :presence => true, :uniqueness => true
validates :key, :presence => true, :uniqueness => true
validates :score, :presence => true, :numericality => { :only_integer => true }
def captured?
!achievement_id.nil?
end
end
приложение / модели / достижения / flag_captured.rb
module Achievements
class FlagCaptured < Achievement
has_one :flag, :foreign_key => :achievement_id, :autosave => true
def score
self.flag.score
end
end
end
Я создаю достижение FlagCaptured в консоли следующим образом:
Achievements::FlagCaptured.create(:flag => Flag.first, :team => Team.first)
Теперь достижение будет создано, и я могу получить его:
Achievements::FlagCaptured.first
Однако ни одна из сторон отношения не установлена.
So
Achievements::FlagCaptured.first.flag
ноль
и
Achievements::FlagCaptured.first.flag_id
выдает ошибку NoMethodError.
Далее оба:
Flag.first.achievement
Flag.first.achievement_id
ноль.
Что здесь происходит?
Я перепробовал все, что мог придумать (установка внешних ключей, указание имен классов, указание обратного отношения), и ничего не работает. (