在Mongoid 6.2.1中使用Rails 5.1.3,当数据有效时,我收到验证错误。以下是迄今为止我注意到的两个问题:
character.rb
belongs_to :user, inverse_of: :characters
belongs_to :bdo_class, class_name: 'BDOClass'
user.rb
has_many :characters, inverse_of: :user
我指定了BDO类user.characters.new(...)
,保存并保存。
如果我然后进行字符搜索并保存,例如;
ch = Character.where(:name => 'MyCharacter').first
ch.save!
我收到验证错误:User can't be blank, Bdo class can't be blank
如果我自己检查ch.user_id
我可以看到该字段是正确且有效的,它会引用它应该的ObjectId。
我在Rails 5中查找了此问题的可能修复程序,建议我在类上设置optional: true
。但是我希望这个字段是必需的。它也无法解决问题,因为ch.user
仍会返回nil。
Character.where(:name => 'Drahcir').first
#<Character _id: 5a099cbabc80b75e845a997a, name: "Drahcir", name_case: "drahcir", level: "58", ap: 0, aap: 0, dp: 0, is_primary: true, user_id: BSON::ObjectId('5a099b48bc80b75e03a4ac3e'), bdo_class_id: BSON::ObjectId('5a098e86bc80b75998d141c9')>
User.where(:username => 'Nishikin').first
#<User _id: BSON::ObjectId('5a099d6dbc80b75ee6e6d2d7'), guild_master: nil, member: nil, officer: nil, user_case: "nishikin", username: "Nishikin">
Sergio在评论中指出user_id与父用户的_id不匹配。这让我想到了为什么user.characters.new(...)
链接了错误的ObjectId的问题,同样适用于对BDOClass的引用。
非常感谢任何帮助:)