首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Mongodb & Datamapper)未初始化常数DataMapper (NameError)

(Mongodb & Datamapper)未初始化常数DataMapper (NameError)
EN

Stack Overflow用户
提问于 2013-02-13 13:41:27
回答 1查看 1.1K关注 0票数 1

我尝试在我的项目中使用datamapper和mongoid。我跟踪了链接https://github.com/solnic/dm-mongo-adapter。但是没有这么多的信息。我在这篇文章中同化了datamapper和sqlite3适配器:http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-working-with-datamapper/一切都可以用sqlite3,但是我陷入了mongodb的泥潭。

当我在控制台中运行"ruby rm.db“时,我会接受"dm.rb:1:in‘:(NameError)”错误。

我如何解决这个问题?我在下面的宝石文件中添加了这些宝石:

代码语言:javascript
复制
dm-core
dm-aggregates
dm-migrations
mongo
mongodb
mongo_ext 

然后,我在项目根目录中的一个名为dm.rb的文件中添加了以下代码。

代码语言:javascript
复制
DataMapper.setup(:default,
  :adapter  => 'mongo',
  :database => 'my_mongo_db',
)

# Define resources
class Student
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :name, String
  property :age, Integer
end

class Course
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :name, String
end

# No need to (auto_)migrate!
biology = Course.create(:name => "Biology")
english = Course.create(:name => "English")

# Queries
Student.all(:age.gte => 20, :name => /oh/, :limit => 20, :order => [:age.asc])

# Array and Hash as a property
class Zoo
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :opening_hours, Hash
  property :animals, Array
end

Zoo.create(
  :opening_hours => { :weekend => '9am-8pm', :weekdays => '11am-8pm' },
  :animals       => [ "Marty", "Alex", "Gloria" ])

Zoo.all(:animals => 'Alex')
EN

回答 1

Stack Overflow用户

发布于 2013-03-08 00:28:47

我给你分两部分回答。

首先,为了解决当前的问题,问题是在尝试使用它之前,它看起来并不需要DataMapper。您可以在rb文件的顶部要求dm-mongo适配器,或者因为您使用的是绑定器,所以可以在Gemfile中直接这样做。

代码语言:javascript
复制
# add this to the beginning of your dm.rb file
require 'dm-mongo-adapter'

# or put this in your Gemfile, run with `bundle exec dm.rb`
gem 'dm-mongo-adapter', :require => true

第二,关于dm-mongo适配器的使用.这种方法有几个问题,可能会让你现在和以后都头疼。

  1. MongoDB不对查询使用SQL语法,它是一个非关系数据库。尽管DataMapper非常棒,但它完全基于作为查询语言的SQL,它的所有API和文档建模助手都是考虑到关系数据建模的。 您正在使用的mongo适配器是为了弥补那些习惯了SQL语法的开发人员的差距而设计的,但是这两种方法有很大的不同,由于查询不佳、索引差和数据模型差,这两种方法可能会导致性能不太理想,而这些都不是真正设计在MongoDB这样的数据库中使用的。 我强烈建议签出蒙古人蒙戈地图 (或者仅仅使用蒙戈 gem本身),而不是采用这种方法。 此外,您还应该查看10 the的网站,其中有许多关于MongoDB与传统关系dbs的不同之处以及为什么在构建应用程序之前理解这些差异的很好的演讲和演示。 http://www.10gen.com/presentations/building-your-first-app-introduction-mongodb-0 http://www.10gen.com/presentations/schema-design-4
  2. 如果您查看dm-mongo-适配器的github,它似乎已经一年多没有更新了。这可能与我刚才写的内容有很大关系,但也会给自己带来麻烦。您甚至不太可能成功地使用MongoDB更新版本的旧版本,而且您肯定无法利用较新的MongoDB功能。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14854918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档