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
是的,我忘記把它放在上面的示例代碼中,對不起。 –