Rails 5 - belongs_to在数据有效时抛出验证错误

时间:2017-11-13 14:44:38

标签: ruby-on-rails ruby validation ruby-on-rails-5

在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的引用。

非常感谢任何帮助:)

0 个答案:

没有答案