单独使用ActiveRecord
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定义
class User < ActiveRecord::Base
end
ActiveRecord配置
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
数据表迁移
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命令才能得出上面给出的正确输出。
804



被折叠的 条评论
为什么被折叠?



