Ruby on rails MongoDB验证从has_失败,并且_属于_多个关系
我正在构建一个简单的脚本来填充MongoDB数据库。这是我第一次使用NoSQL数据库,我觉得我可能是从SQL数据库的角度考虑这个问题 此脚本的基础是填充一个数据库,该数据库包含几个相互关联的集合。但是,当我运行脚本时,我在构建/保存文档时看到一个无效错误 我有三个收藏<代码>书籍、Ruby on rails MongoDB验证从has_失败,并且_属于_多个关系,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我正在构建一个简单的脚本来填充MongoDB数据库。这是我第一次使用NoSQL数据库,我觉得我可能是从SQL数据库的角度考虑这个问题 此脚本的基础是填充一个数据库,该数据库包含几个相互关联的集合。但是,当我运行脚本时,我在构建/保存文档时看到一个无效错误 我有三个收藏书籍、作者和风格,具有以下关系 一本书有许多作者 一个作者有许多书籍 一个作者有许多风格 一种风格有许多作者 模型定义如下: #图书模型 课堂用书 include Mongoid::Document 包含Mongoid::时间戳
作者
和风格
,具有以下关系
- 一本
有许多书
作者
- 一个
有许多作者
书籍
- 一个
有许多作者
风格
- 一种
有许多风格
作者
#图书模型
课堂用书
include Mongoid::Document
包含Mongoid::时间戳
字段:标题,类型:字符串
验证:标题,状态:true
_和_属于_许多作者吗
索引({title:'text'})
结束
#作者模型
类作者
include Mongoid::Document
包含Mongoid::时间戳
字段:名称,类型:字符串
验证:名称,状态:true
你和你属于很多书吗
有很多种风格吗
索引({name:1},{unique:true})
结束
#样式模型
班级风格
include Mongoid::Document
包含Mongoid::时间戳
字段:类型,类型:字符串
验证:类型,状态:true
_和_属于_许多作者吗
索引({type:1},{unique:true,name:“type_index”})
结束
这是我的剧本:
#script.rb
书
book.title=“好兆头”
['Neil Gaiman','Terry Pratchett'],每个人都有作者的名字|
author=author.find_by(姓名:author_name)
如果是.nil?
author=author.new(名称:author\u name)
结束
#作者可以拥有的写作风格列表
#假设每个作者都有一个样式列表
文学风格。每个人都有自己的名字|
style=style.find_by(type:style_name)
如果没有?
author.styles.build(Style.new(type:Style\u name))
其他的
除非author.styles.include?style.id
作者:我错了
author.errors#=>@messages={:styles=>[“无效”]}
book.author.build(book.attributes)
保存
结束
创建了书籍
文档,但由于无效的样式验证错误,作者
和样式
不会持续存在。我希望我能确切地看到是什么导致验证失败,但是消息传递非常模糊。我怀疑它来自于has\u和Author
和Style
之间的许多关系中的一些内置验证,但我无法确定它
我发现有趣的是,Book
文档有一个author\u id
属性,该属性中填充了id,但是当我跳入控制台时,没有作者可以被拉到或绑定到书籍
如果需要的话,我很乐意提供更多信息。我想我需要知道更多的信息来明确告诉您问题所在——您使用的是什么版本的Mongoid?您是在空数据库上运行此脚本,还是作者和样式文档已经存在?那些看起来像什么
话虽如此,我确实在您的脚本中看到了几个bug,但我不确定它们是否导致了您的问题:
我相信if语句中的行将抛出一个错误。相反,它应该说author.styles.build(type:style\u name)
除非author.styles.include?style.id
作者风格
if style.nil?
author.styles.build(Style.new(type: style_name))
else
...
unless author.styles.include? style.id
author.styles << style
end