`

Rails3.2使用mongoDB学习笔记之mongoid

 
阅读更多
前段时间写过一个mongo_mapper的demo程序,在写那个测试程序的时候,看见很多人都说mongoid更好,于是打算用一下试试,写了好久了,最近公司比较忙,没时间整理,现在贴出来。

新建项目
rails new spec_mongoid


一、mongonid
   官方首页http://mongoid.org/
  1、安装gem
    Gemfile中添加安装
    gem "mongoid"
    gem "bson_ext"

  2、配置
    执行命令:
    $ rails g mongoid:config

    会在系统中生成一个mongoid的配置文件
    
create  config/mongoid.yml


    如果出现 Could not find a JavaScript runtime.这个错误请在Gemfile中添加
    gem 'execjs'
    gem 'therubyracer'

    修改config/application.rb文件,注释
    # require 'rails/all'

    用下面几行取而代之
    require "action_controller/railtie"
    require "action_mailer/railtie" 
    require "active_resource/railtie"
    require "rails/test_unit/railtie"

   
    把文件environment/development.rb和environment/test.rb中注释掉
    # config.active_record.mass_assignment_sanitizer = :strict 
    # config.active_record.auto_explain_threshold_in_seconds = 0.5
 


    删除database.yml这个文件

    记得加载
    Mongoid.load!("path/to/your/mongoid.yml")


    日志application.rb中添加
    config.mongoid.logger = Logger.new($stdout, :warn)

    关闭日志的方法是在mongoid的配置文件中
     logger: false


  3、语言
    创建config/initializers/mongoid.rb
    添加代码
    Mongoid.add_language("zh-CN")

    如果是支持所有语言的话
    Mongoid.add_language("*")



=======================
问题
我用的全部都是最新版本,绝对的小白鼠阿,遇到了如下恶心问题
host is not a valid option for Mongo::Connection

官方说这是一个bug,需要重新安装这个gem
修改
gem 'mongoid', :git => 'git://github.com/mongoid/mongoid.git'

但是弄完了之后,又出现这个
undefined method `add_language' for Mongoid:Module (NoMethodError)

只好把mongo.rb中的 
#Mongoid.add_language("*")
注释掉
=======================

$ rails g model user
      invoke  mongoid
      create    app/models/user.rb
      invoke    test_unit
      create      test/unit/user_test.rb
      create      test/fixtures/users.yml


上面的命令在执行之后,给user.rb自动加上Mongoid的引用
   class User
     include Mongoid::Document   
   end

随后运行rails console,测试了几个代码
ruby-1.9.2-p180 :003 > User.create(:name=>"李磊")
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: nil, age: nil>
ruby-1.9.2-p180 :002 > user = User.find('4f630bf1421aa97127000001')
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: nil, age: nil> 
ruby-1.9.2-p180 :004 > user.update_attributes(:name=>"李磊",:login=>"lilei",:age=>15)
 => true 
ruby-1.9.2-p180 :005 > user
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: "lilei", age: 15>
 


总体还算是成功

写个单元测试试一试
先把test_helper.rb中的下面代码注释掉
  # fixtures :all

然后在user_test.rb中添加:
# encoding: utf-8
require 'test_helper'

class UserTest < ActiveSupport::TestCase
  test "create a User" do
    assert_difference "User.count",1 do
      User.create(:name=>"李磊",:age=>15,:login=>"lilei")
    end 
    lilei = User.last
    assert_equal [lilei.name,lilei.age,lilei.login],["李磊",15,"lilei"]
  end 
end

运行单元测试:
rake test:units
Started
.
Finished in 0.020769 seconds.

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips



总结:
除了那个新版本不稳定的bug之外,总体上比mongomaper还是简单一些,需要配置的东西很少
但是官网的说明文档是在是不敢恭维,导航的体验太差了,尤其是上下级的那个色调。



实例代码地址
https://github.com/chinacheng/spec_mongoid
分享到:
评论

相关推荐

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证.zip

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证 Rails 4.1有关设计的Rails 4.1示例应用程序,请参见:rails设计有一个用于设计的教程:Rails 设计教程。类似示例和教程这是来自 RailsApps...

    rails 3.2 API

    Rails 3.2 API 是一个重要的开发资源,主要用于Ruby on Rails框架的开发。Rails是基于Ruby语言的一个开源Web应用程序框架,...在学习和使用Rails 3.2 API时,建议结合实际项目进行实践,这样能更好地理解和掌握其精髓。

    Agile Web Development with Rails for Rails 3.2

    ### Agile Web Development with Rails for Rails 3.2 #### 核心知识点概览 - **Rails 3.2概述** - **敏捷开发方法论** - **Model-View-Controller (MVC) 模式** - **Ruby on Rails基础与高级特性** - **面向对象...

    Ruby on Rails 3.2 Tutorial

    《Ruby on Rails 3.2 Tutorial》是Michael Hartl撰写的一本...虽然Rails版本已经更新至6.x,但3.2版本的学习依然有价值,因为许多核心概念和最佳实践仍然适用,而且理解老版本可以帮助你更好地理解新版本的变化和发展。

    Web开发敏捷之道 应用Rails进行敏捷Web开发第4版 原版书及代码 (rails3.2版)

    Web开发敏捷之道 应用Rails进行敏捷Web开发第4版 原版书及代码 (rails3.2版) 原书名为:Agile Web Development with Rails 4th for Rails 3.2 代码包含了 3.0、3.1、3.2 ,与原书配套的是3.2。 里面包含了第三版的...

    rails-prelaunch-signup, web启动预启动站点的Rails 3.2应用程序示例.zip

    rails-prelaunch-signup, web启动预启动站点的Rails 3.2应用程序示例 Rails 应用程序用于启动预启动注册站点Rails 3.2示例应用程序"测试版即将启动"启动预启动注册站点示例应用程序。Rails 预启动注册应用程序插件...

    ruby on rails对mongodb的操作

    最后,`Rails应用中MongoDB+MySQL杂交`的话题意味着在同一个应用中同时使用MongoDB和MySQL是可能的。这通常用于混合使用关系型数据和非关系型数据,或者在迁移过程中逐步替换数据库。在这种情况下,需要分别配置`...

    wize_upgrader:从 rails 3.2 升级到 rails 4 的快速而肮脏的宝石

    Wize 升级宝石 ... 使用rails new &lt;rails&gt; -T生成一个新的 rails 应用程序 复制过来 .git 应用程序 D b 脚本 =&gt; 垃圾箱 规格 小贩 配置/路由.rb 配置/初始值设定项(wrap_parameters.rb 除外) 配置/

    rails查询学习笔记

    描述中虽然没有具体信息,但我们可以推测这可能是一篇关于Rails中查询技巧和最佳实践的学习笔记,可能包括如何使用ActiveRecord查询接口进行复杂的数据库操作,如选择、过滤、排序、分组等。 标签 "源码" 暗示了这...

    mongorails:在Rails应用中使用mongoDB测试应用

    MongoRails是在Ruby on Rails应用中使用MongoDB作为数据存储的框架。MongoDB是一个NoSQL数据库,它使用文档型数据模型,提供了灵活性和高性能,而Rails是Ruby语言的一个流行Web开发框架,基于MVC(模型-视图-控制器...

    fullcalendar_assets:一个示例,显示了在Rails 3.2上运行的全日历,所有这些都捆绑在一起,成为一个漂亮而整洁的资产

    使用fullCalendar使用Rails 3.2 我最近用FullCalendar和jquery.rest插件制作了一些资产宝。 这是一个简单的示例,可以看到它们的实际效果。 查看GemFile以及application.js和application.css文件,看看它们在起作用...

    rails3-devise-rspec-cucumber:具有Devise和RSpec和Cucumber的示例Rails 3.2应用程序

    相关的示例应用程序可能会有用: 随书 展示了如何集成Foundation 展示了如何集成Bootstrap 使用OmniAuth进行身份验证使用Devise进行身份验证Rails 3.2 此仓库包含一个将与和集成的R​​ails 3.2示例应用程序。...

    mongoid_rails_migrations:Mongoid的数据迁移

    gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...

    mongoid_rails_migrations, Mongoid的数据迁移.zip

    mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid&gt; = 4.0.0和 Rails&gt; = 4.2.0.对于 Rails&gt; = 3.2.0和 Mongoid&gt; = 3.0.0,使用版本 1.0.0.

    Rails 3.2:嵌套形式的演示,第3部分:我们正在开始进攻!

    在Ruby on Rails框架中,嵌套表单...”这篇文档,开发者不仅可以学习如何使用嵌套表单,还能了解到如何在实际项目中有效地应用和优化这一功能。文档中的示例代码和解释将有助于深入理解这一关键概念,并提高开发效率。

    ruby-on-rails-mon-db:使用MongoDB的Ruby on Rails

    在Mac上安装MongoDB 启动MongoDB服务器mongodMongodb数据目录权限 sudo chmod 777 /data/db创建一个Rails项目使用'--skip-active-record'开关创建Rails项目。 rails new ruby-on-rails-with-mongodb --skip-active-...

    Rails 3.2:嵌套形式的演示第4部分:切换到目标计算机!

    在本教程中,我们将深入探讨如何在Rails 3.2框架中使用嵌套表单,特别是在"Rails 3.2:嵌套形式的演示第4部分:切换到目标计算机!"这一主题中。这个示例将展示如何为Ship和Pilot模型添加验证规则,以及如何在Ruby ...

    pjax_rails, Rails的PJAX集成.zip

    pjax_rails, Rails的PJAX集成 用于 Rails 3.2 的 PJAX 通过资产管道将 wanstrath PJAX的Chris 集成到 Rails 3.2 中。要激活,请将它的添加到 app/assets/javascripts/application.j

    learning_mongodb:使用 Rails 4.2 和 mongodb 创建 JSON API

    学习MongoDB API 端点 User#create (创建一个新用户) curl -v -H "Content-type: application/json" -X POST http://localhost:3000/api/v1/users -d '{"user":{"name":"nitin misra", "email":"nitin@example....

    Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0)

    3. Rails 3.2: Rails 3.2进一步优化了性能,引入了低延迟的LogSubscriber,提升了日志记录的效率。ActiveRecord的查询性能得到提升,例如添加了`pluck`方法,可以直接获取数据库列的值。此外,`rails generate ...

Global site tag (gtag.js) - Google Analytics