Ruby 如何基于另一个mongoid字段验证一个mongoid字段?
我切换到了nosql,正在和Sinatra玩Mongoid。我对这一点还不熟悉,我被这个问题难住了Ruby 如何基于另一个mongoid字段验证一个mongoid字段?,ruby,sinatra,mongoid,Ruby,Sinatra,Mongoid,我切换到了nosql,正在和Sinatra玩Mongoid。我对这一点还不熟悉,我被这个问题难住了 class Item field :name, type: String field :category, type: Moped::BSON::ObjectId # holds _id of the category object field :cover_type, type: String validates_presence_of :category
class Item
field :name, type: String
field :category, type: Moped::BSON::ObjectId # holds _id of the category object
field :cover_type, type: String
validates_presence_of :category
validates_inclusion_of :cover_type, in:["Hardcover", "Softcover"]
end
class Category
field :name
validates_inclusion_of :name, in:["Books", "Movies", "Ebooks"]
end
想象一下,一家出售书籍、电影和电子书的商店,出售的每一件商品都属于这三个类别中的一个。如果一件商品被列在“书籍”类别下,那么该商品需要有一个名为封面类型
的字段。此外,封面类型
只能是“精装”或“软封面”
保存项目时,当项目属于图书类别,因此需要存在字段封面类型
,该字段也被验证为“精装”或“软封面”,如何在项目类中拼凑验证
如果项目不是书籍,则封面类型可以为空。Mongoid模型继承ActiveModel验证。您只需编写一个:
book?
方法令人不快;为什么不在项目上使用属于:category
,在类别上有许多:items
编辑:以下是书的内容?
如果您使用的有很多
,并且属于
,那么它可能会是什么样子:
def book?
category.name == 'Books'
end
没有什么不同,但是你肯定会访问项目。在你的应用程序中,分类,我看不出你为什么不想让它变得更简单。你能解释一下为什么书籍?
令人不快吗?如果我改为使用在类别上有很多:项目,并且属于:分类,怎么样我会强制要求项目中的封面类型只能是软封面和精装封面吗?这很令人不快,因为它必须按ID查找类别,而Mongoid/ActiveModel给出的属于,正是出于这个原因。我已经更新了答案,如果你使用这些便利,会发生什么方法。
def book?
category.name == 'Books'
end