我有一个看起来像这样的类:
class SearchService
include Mongoid::Document
key :name, String
field :url, String
field :searchBaseUrl, String
validates_presence_of :name, :url, :searchBaseUrl
validates_uniqueness_of :name
end
这里的第一个问题是我错误地使用了 validates_presence_of
或者看起来是这样。我注释掉了这一行,我可以毫无问题地在控制台创建类实例。但是,当我尝试创建带有 validates_presence_of 的对象时,出现错误:
NoMethodError: undefined method `delete' for String:Class
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/fields.rb:230:in `add_field'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/fields.rb:145:in `field'
这个错误信息有意义吗?我很难看出 String 类上缺少的方法与我错误地使用 validates_presence_of
之间的关系。如果我只能挑出关于 Ruby 的一件让我烦恼的事情,那一定是可怕的错误消息。
rails docs说 validates_presence_of 是为了关联。但是 mongo db page说它用于必填字段。 mongodb 文档不正确吗?
我正在尝试决定这是一个我应该向 mongoid 团队报告的问题,还是我只是不了解该语言的工作原理。
更新:好的,现在我在一个根本不使用 validates_presence_of 的类中遇到了一个非常相似的错误。所以这是其他一些问题(即使注释掉该行最初修复了它)。
Update2:在我看来,这似乎是 mongoid 中的错误。更改此行:
字段:名称
到
字段:名称,字符串
将导致错误显示。似乎任何用类型定义的字段都会弄乱 mongoid。或者那些不应该在那里了? mongodb 文档(上面链接)的代码看起来像 key :votes, Integer, :default => 0
所以如果它无效,则文档是错误的。
rails 3.1.1, ruby 1.9.3
最佳答案
您对字段类型定义使用了不正确的语法。它应该使用选项散列和键“类型”。来自文档的示例 http://mongoid.org/
class Artist
include Mongoid::Document
field :name, type: String
embeds_many :instruments
end
您引用了 MongoMapper 示例,但使用了 Mongoid ))
关于ruby-on-rails - 字符串 :Class when using Mongoid and creating records via console 的未定义方法 'delete',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207106/