Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Mongoid并通过控制台创建记录时,String:Class的未定义方法“delete”_Ruby On Rails_Ruby_Mongodb_Mongoid - Fatal编程技术网

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对我的背景做这件事的方式所抛弃。