最近由于忙于考研,所以是在是耽误了不少的时间和精力,所以造成了我脱离网络一段时间,搞得我是考研考的不好,结果这个学习的过程也给耽误了,哎....考研,原来真的不是儿戏...还是要复习的,原来以为考研应该随便看看的话在理想的估计差不多的吧...差不多每一科都及格了就好了...但是现在发现原来不是这个样子的....知识点太多了..一下子搞不定的..怪不得大家都是要复习那么长时间....看来下次如果要考研的话我一定要去好好复习一下...免得有对不起自己了,废话不多说了.现在开始这个学习笔记系列的第三个部分,使用Oracle 10g进行ROR的数据库操作.上次我们说了使用Mysql的环境.但是由于我现在项目开发中一直使用的是Oracle数据库,而且在两个都是大同小异.所以现在开始我们就是用Oracle数据库进行操作.必要的时候也会提及一下MySQL的
首先,我们来安装一下Oracle的环境.主要是Ruby驱动和ActiveRecord adapter的支持.
从rails 2.0开始, ActiveRecord对于商业数据库的adapter的支持已经取消了,只有Mysql和SQLlite的支持了吧.所以对于其他的部分的话要自己独立的安装,
安装activerecord-oracle-adapter使用下面的命令:
如果要安装sqlserver的话可以将oracle换成sqlserver进行安装
或者从下面下载加强版本的Adapter:
http://rubyforge.org/frs/?group_id=6212&release_id=22063 中下载最新版本1.1.9
http://rubyforge.org/frs/download.php/49541/activerecord-oracle_enhanced-adapter-1.1.9.gem
安装ruby-oci8驱动
下载地址是:http://www.rubyforge.org/projects/ruby-oci8
好了,安装完成了之后我们可以使用一个ruby的测试,来查看我们是否安装成功!
require 'rubygems'
require 'active_record'
class Account < ActiveRecord::Base
set_table_name "account" #设置表名
end
ActiveRecord::Base.establish_connection(
:adapter => "oracle",#数据库适配器
:database => "xe",#数据库SID
:username => "fonhal",#数据库用户名
:password => "123123" #数据库用户密码
)
account = Account.find(:first,:conditions =>"USERID = 'j2ee'") #查询数据库
puts "#{account.userid} #{ account.email} #{ account.firstname} "
对于不同的用户要进行更换数据库的相关配置和表名.
如果成功的话测试结果如下:
好了,Oracle数据库驱动配置好了.现在我们开始一个简单的Rails和Oracle 数据库的链接的Demo吧!
1. 打开Aptana,然后创建一个Rails Project.数据源选择Oralce, 然后Rails版本选择2.2.2版本
2. 创建好项目之后我们使用可以scaffold产生一个Model和数据库迁移配置产生一个版本文件.如果我们不想使用这种方式那也可以的直接使用下面的命令进行数据库迁移:
(如果这里不可以的话可能还是需要创建一个model或者使用scaffold进行创建.然后在使用上面的命令,因为我是之前使用过scaffold进行创建了一个Demo,所以在数据库中有一个schema_migrations的文件记录着当前用户的迁移版本信息.这样的话方便如果改变了表格等进行数据库的回滚操作.迁移到上一数据库表的版本.
这个时候会在db下产生一个schema.rb文件,里面记录着当前用户下的所有用户表的信息,例如:
ActiveRecord::Schema.define(:version => 20090114020840) do
create_table "account", :primary_key => "userid", :force => true do |t|
t.string "email", :limit => 80, :null => false
t.string "firstname", :limit => 80, :null => false
t.string "lastname", :limit => 80, :null => false
t.string "status", :limit => 2
t.string "addr1", :limit => 80, :null => false
t.string "addr2", :limit => 40
t.string "city", :limit => 80, :null => false
t.string "state", :limit => 80, :null => false
t.string "zip", :limit => 20, :null => false
t.string "country", :limit => 20, :null => false
t.string "phone", :limit => 80, :null => false
end
end
在这个表里面就是当前用户的表信息,创建新的表的话应该也是可以在里面进行添加.和我们使用model创建的的迁移文件应该是一样的.
3.如果不想使用scaffold的话那现在如果上面的命令执行结束的话那就可以自己去建立页面然后进行操作,但是这样的话可能要浪费时间一点.下面我先给出一个使用scaffold的方式创建的Demo:
script/generate scaffold post title:string author:string description:text
产生一个post模型,并且在db/migrate/下产生一个迁移文件.文件名为当前的schema的版本,我们也是测试创建博客的例子.创建结束之后,当然还是进行数据库迁移操作,使用rake db:migrate进行数据库迁移.
4. 上面的操作好了之后的话启动服务器,选择servers Tab.然后找到当前项目名称对应的服务,然后选择启动,默认创建服务器的时候会使用mongle作为服务器,如果出现了服务器不能够启动的话可能是因为默认使用的3000端口已经有工程占用了.右键点击项目服务器选择 edit server更改端口号和他的其他配置都可以.启动服务器之后使用
选择New Post可以创建新的post:
这样的话一个博客的Demo就创建好了!对于其中使用Scaffold创建的代码如果不想使用的话可以自己根据它的他妈进行创建自己的代码,不适用Scaffold的方式.这是创建了一个post后的预览.(貌似"过程"乱码了.....不是过稣..大家看看会不会出现乱码!)
不过我个人而言觉得使用Scaffold这种方式的话是一个很好的选择,当然对于以后熟悉了ROR的相关的一些知识之后,使用这种方式可能会很方便.但是如果对于初学者的话肯定都是愿意写自己的代码.好了.本次学习到此为止,现在大家已经基本上能够创建一个ROR的示例,并且和数据库进行对联,下一次我对于使用Scaffold创建的代码进行一个说明,并且创建不适用Scaffold的方式的给大家一个展示.