在Rails外单独使用ActiveRecord

单独使用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命令才能得出上面给出的正确输出。
最后给出示例应用的最终目录结构:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值