Ruby on rails 使用Mongoid并通过控制台创建记录时,String:Class的未定义方法“delete”
我有一个类似这样的类:Ruby on rails 使用Mongoid并通过控制台创建记录时,String:Class的未定义方法“delete”,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我有一个类似这样的类: 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_pr
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_似乎不正确。我注释了这行代码,我可以在控制台创建类实例,没有问题。但是,当我尝试使用validates_presence_创建对象时,我遇到了一个错误:
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_的方法之间的关系。如果我只能从Ruby中挑出一件让我头疼的事情,那就是可怕的错误消息
验证存在的说法是为了关联。但是,声明它用于必填字段。mongodb文档是否不正确
我正试图决定这是一个我应该向mongoid团队报告的问题,还是我只是不理解语言是如何工作的
更新:现在我在一个根本不使用validates\u presence\u的类中遇到了一个非常类似的错误。所以,这是另一个问题,尽管对这句话的评论一开始就解决了这个问题
更新2:在我看来,这似乎是mongoid中的bug。更改此行:
字段:名称
到
字段:名称,字符串
将导致显示错误。似乎任何用类型定义的字段都会弄乱mongoid。或者那些不应该在那里了?上面链接的mongodb文档的代码看起来像key:voces,Integer,:default=>0,所以如果它无效,文档就错了
Rails 3.1.1、Ruby 1.9.3在Rails 3中,您应该使用: 与_选项一起使用,使其更干燥
with_options :presence => true do |v|
v.validates :name, :uniqueness => true
v.validates :url
v.validates :searchBaseUrl
end
在Rails 3中,您应该使用: 与_选项一起使用,使其更干燥
with_options :presence => true do |v|
v.validates :name, :uniqueness => true
v.validates :url
v.validates :searchBaseUrl
end
字段类型定义使用了不正确的语法。它应该使用选项哈希和键类型。来自文档的示例
您参考了MongoMapper示例,但使用Mongoid时,字段类型定义使用了不正确的语法。它应该使用选项哈希和键类型。来自文档的示例
您参考了MongoMapper示例,但使用了Mongoid,问题在于您使用的是Mongoid,而mongodb.org上的示例使用的是MongoMapper 请注意,这些是rails的不同ODM,用于定义字段的语法略有不同 请参阅mongoid的文档 使用mongoid的字段的格式:
class Person
include Mongoid::Document
field :first_name, type: String
field :middle_name, type: String
field :last_name, type: String
end
jcollum,问题在于您使用的是mongoid,而mongodb.org上的示例使用的是mongomapper 请注意,这些是rails的不同ODM,用于定义字段的语法略有不同 请参阅mongoid的文档 使用mongoid的字段的格式:
class Person
include Mongoid::Document
field :first_name, type: String
field :middle_name, type: String
field :last_name, type: String
end
您使用的是哪个版本的Rails?您使用的是哪个版本的Rails?我想这可能是问题的根源-旧样式可能无法与MongoidAh的最新版本一起使用,这是一个不错的可能性。我发现旧式验证更容易阅读。我认为这可能是问题的根源——旧式验证可能无法与MongoidAh的最新版本一起使用,这是一个不错的可能性。我发现老式的验证更容易阅读。啊,我明白了,所以文档中的类定义依赖于MongoMapper。古怪的我来自C世界,这对我来说是一种奇怪的依赖。jcollum,您使用的是mongoid而不是mongomapper。请确保您参考的是正确的文档集。mongoid文档相当好。@Tyler同意,它非常好。Ruby在我的背景中做这些事情的方式让我很反感。啊,我明白了,所以文档中的类定义依赖于MongoMapper。古怪的我来自C世界,这对我来说是一种奇怪的依赖。jcollum,您使用的是mongoid而不是mongomapper。请确保您参考的是正确的文档集。mongoid文档相当好。@Tyler同意,它非常好。我只是被Ruby对我的背景做这件事的方式所抛弃。