ruby-on-rails - 字符串 :Class when using Mongoid and creating records via console 的未定义方法 'delete'

标签 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_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/

相关文章:

ruby-on-rails - Redis、Mongoid、Rails - 在 View 中使用 redis 属性

java - 将 Json 解析为 DBObject

ruby-on-rails - 如何在一定时间后自动更新数据库中的 bool 值?

ruby-on-rails - 如何覆盖 Rails 模型中的列?

mysql - 使用 memcache 存储来自 MySQL 的结果并对其执行后续查询

ruby - 如何在我的 ruby​​ 类中重构这些条件?

ruby-on-rails - 多个用户的 Rails http 基本身份验证?

ruby - ruby 有命令行框架吗?

javascript - 可排序与可拖动 jQuery 和 Rails

MongoDB ATLAS 到本地的迁移