2
我正在尝试在Mongoid中使用命名空间模型,并且似乎无法使其工作。Mongoid命名空间模型和继承
我有以下型号:成就,国旗,FlagCaptured
Achievment是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
然而,关系的任何一方都不设置。
所以
Achievements::FlagCaptured.first.flag
是零
和
Achievements::FlagCaptured.first.flag_id
给人以NoMethodError。
另外两个:
Flag.first.achievement
Flag.first.achievement_id
是零。
这是怎么回事? 我试过了我能想到的所有东西(设置外键,指定类名,指定反向关系)并且没有任何效果。 :(
不应该'类FlagCaptured
rubish
是的,我忘记把它放在上面的示例代码中,对不起。 –