RubyChina源代码研究笔记:Rails3+Mongodb: 如何在Rails项目中整合Mongodb

一直在研究Ruby-China的源代码,RC中使用的是Mongodb. 我也准备尝试一下mongodb。

  1. 新建项目
    rails new mongodb --skip-active-record
    生成一个叫mongodb的项目,并且移除active-record的代码

  2. 引入Gem
    修改Gemfile文件
    gem 'mongoid', '3.0.0.rc'   
    运行:
    bundle install

  3. 生成配置文件
    rails g mongoid:config
    使用默认的吧
  4. 生成代码
    rails g scaffold blog title:string content:text 

  5. 启动程序
    rails s 

  6. 访问
    http://127.0.0.1:3000/blogs

  7. 看看我们的一个新的需求吧,我们需要假(软)删除 blog,该怎么办呢?其中一个办法就是设置一个 deleted_at 字段,假删除。
    但是 软删除是一个公共的需求,看看RubyChina是如何做的吧。
    在model/mongoid/soft_delete.rb代码如下
    # coding: utf-8
    # 软删除
    module Mongoid
      module SoftDelete
        extend ActiveSupport::Concern
    
        included do
          field :deleted_at, :type => DateTime
    
          default_scope where(:deleted_at => nil)
          alias_method :destroy!, :destroy
        end 
    
        def destroy
          if persisted?
            self.update_attribute(:deleted_at,Time.now.utc)
          end 
    
          @destroyed = true
          freeze
        end 
      end 
    end
    
    代码解说:
    ActiveSupport::Concern http://blog.csdn.net/hexudong08/article/details/7656396
    freeze: 冻结所有的值,以后不能修改了,可以通过 frozen? 判断
    将代码放到model中,会自动的加载。在model中可以直接引用

    最后的blog代码
    class Blog
      include Mongoid::Document
      include Mongoid::Timestamps #会自动生成created_at和update_at字段
      include Mongoid::SoftDelete
    
      field :title
      field :content
    
    
    end
    

  8. 如何取出非默认的scoped的数据,也就是删除了的blog呢?RubyChina的做法
    @topics = Topic.unscoped.desc(:_id).includes(:user)...










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值