在Rails外单独使用ActiveRecord

原创 2013年12月03日 20:32:03

单独使用ActiveRecord

     需要在应用根目录demo/下的app.rb文件中写入:
require 'active_record'  
require 'sqlite3'  
  
ActiveRecord::Base.establish_connection(  
    :adapter=>'sqlite3',  
    :database=>'data.sqlite3',  
    :pool=>5,  
    :timeout=>5000  
    )  
  
class CreateUsers < ActiveRecord::Migration  
  def change  
    create_table :users do |t|  
      t.string :name  
      t.integer :age  
    end 
  end  
end  

CreateUsers.new.change
  
class User < ActiveRecord::Base  
end  

User.create name:"Jack",age:12

      首先,使用ActiveRecord::Base.establish_connection建立连接,然后定义数据表迁移,再使迁移生效建立数据表,最后就可以像在rails中一样定义model,然后正常使用ActiveRecord了。
    代码可以正常工作了,但可以做的工作还有很多,因为这段代码实在是不美观。

像样的结构

     大杂烩式的代码文件总是不美的,上面代码中包含了数据库连接,表创建,model定义和实际的应用代码四部分,这么多功能各异的部件还是分开好。首先创建demo/db目录,在这个目录下放置所有数据库连接的定义;创建demo/models目录,在下面放置model定义文件。demo/app.rb文件位置不变。

model定义

    model定义文件demo/user.rb的内容就是将上面的user类定义复制过来即可。
class User < ActiveRecord::Base
end

ActiveRecord配置

    新建demo/db/connection.rb文件,该文件里设置数据库连接:
require 'active_record'
require 'yaml'

dbconfig = YAML::load(File.open('db/database.yml'))
ActiveRecord::Base.establish_connection(dbconfig)

   这里模仿rails使用了yaml来配置连接,该文件也在demo/db目录下,内容为:
adapter: sqlite3
database: data.sqlite3
pool: 5
timeout: 5000

    现在的demo/app.rb清爽多了:
require File.expand_path('../db/connection',__FILE__)
Dir[File.expand_path('../models',__FILE__)+'/*.rb'].each{|f| require f }

User.create name:"Jack",age:12

数据表迁移

     现在还有一个问题,我也想像rails中那样利用rake来迁移数据表定义。参考我前一篇博客Rake就可以轻松写出数据迁移的rakefile。在demo/根目录下创建rakefile文件:
require 'active_record'
require 'yaml'
require 'logger'

task :default => :migrate

task :migrate => :environment do
  ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
end

task :environment do
  ActiveRecord::Base.establish_connection(YAML::load(File.open('db/database.yml')))
  ActiveRecord::Base.logger = Logger.new(File.open('db/database.log', 'a'))
end

只要在终端中执行rake命令就可能完成数据迁移:
$ rake
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   -> 0.0020s
==  CreateUsers: migrated (0.0040s) ===========================================

    实际上现在还无法得出这样的输出,因为还没有编写迁移代码文件。那么迁移文件写在哪儿呢?在demo/db/migrate/目录中专门用来放置数据迁移代码,比如现在我们在该目录下新建一个迁移文件001_create_users.rb,写入迁移代码:
class CreateUsers < ActiveRecord::Migration  
  def change  
    create_table :users do |t|  
      t.string :name  
      t.integer :age  
    end 
  end  
end  

     现在执行rake命令才能得出上面给出的正确输出。
最后给出示例应用的最终目录结构:


rails学习笔记: rake db 相关命令

命令行 rake db:***** script/generate model task name:string priority:integer script/generate migra...
  • maxiaokun55
  • maxiaokun55
  • 2014年03月13日 09:41
  • 715

Python RAKE 关键字提取

RAKE, 即Automatic keyword extraction。 来自于Automatic keyword extraction
  • dongweionly
  • dongweionly
  • 2014年11月20日 22:28
  • 1898

rails rake脚本快速入门

1、rake脚本的作用 以任务的方式创建和运行脚本 当然,你可以用脚本来创建每一个你希望自动运行的任务。但是,对于大型的应用来说,你几乎总是需要为数据库迁移(比如Rails...
  • bajiudongfeng
  • bajiudongfeng
  • 2014年08月15日 09:52
  • 1005

关键词提取方法学习总结(TF-IDF、Topic-model、RAKE)

关键词提取方法学习总结(TF-IDF、Topic-model、RAKE)
  • mpk_no1
  • mpk_no1
  • 2017年07月23日 16:07
  • 2961

Active Record 设计模式原理及简单实现

Active Record 设计模式原理及简单实现 概述 本文简要介绍Active Record 设计模式。Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关...
  • fanhengguang_php
  • fanhengguang_php
  • 2017年02月10日 10:49
  • 2336

iOS--kxmovie之FFmpeg编译和使用

FFmpeg编译 我用的编译环境:OS X 10.10.1  , Xcode 6.1.1  ,   ffmpeg 2.5.3 方法一(未成功):  1)git clone git://githu...
  • oqqQuZi1234567
  • oqqQuZi1234567
  • 2015年01月26日 15:26
  • 7055

用Rakefile管理工程

用Rakefile管理工程 42 人阅读   发表回复 游戏项目的资源管理问题 makefile的利弊 Rakefile使用 优点 使用说明 实例 总结 参考 游戏项目的资源管理...
  • vagrxie
  • vagrxie
  • 2013年04月27日 22:50
  • 19223

Ruby on rails 实战圣经:ActiveRecord 数据表关系

Debugging istwice as hard as writing the code in the first place. Therefore, if you writethe code ...
  • felomeng
  • felomeng
  • 2014年03月14日 20:50
  • 9517

关于Yii2中redis扩展的使用

yii2支持了redis扩展,不需要在本地下载php的扩展库就可以很好的使用 1.下载windows的redis安装包打开cmd,进入安装包目录,使用redis-server.exe redis.c...
  • wyh09102010
  • wyh09102010
  • 2014年12月02日 12:03
  • 3404

关于Yii1和Yii2的ActiveRecord活动记录对象关联查询时底层调用SQL语句的不同

yii1和yii2通过活动记录类对象关联查询数据库时执行的SQL有比较大的区别,而且如果使用不慎还可能导致查询的数据有错漏的情况出现,甚至可能导致表里面命名很多记录,却发现查询出来的结果是空的,我自己...
  • yaoyuanji
  • yaoyuanji
  • 2015年05月09日 11:27
  • 1472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Rails外单独使用ActiveRecord
举报原因:
原因补充:

(最多只允许输入30个字)