The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
posts - 305, comments - 1896, trackbacks - 68, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
  Active Record抽象了数据库连接的概念,帮助应用程序来处理底层的数据库链接的细节,作为替代,Active Record使用通用的调用,将细节委托给一组数据库适配器。

可以使用establish_connection( )方法来制定连接,下面的例子创建了一个mysql数据库连接,数据库的名字是railsdb,服务器的Host名为dbserver.com,用户名为railsuser,密码为railspw

ActiveRecord::Base.establish_connection(

:adapter => "mysql",

:host => "dbserver.com",

:database => "railsdb",

:username => "railsuser",

:password => "railspw"

)

Active Record支持DB2MySqlOraclePostgresSqlServer,以及SqlLite,每一种数据库适配器在链接的参数上都有一些细小的差别,下表列出了常用的参数:


    注意
Oracle适配器的名字为oci

 

数据库连接和Model类是关联的,每个类都从父类那里继承了链接,ActiveRecord::Base作为所有的Active Record类的父类,设置这里的数据库连接就给所有的活动记录类设置了链接,当然,如果需要的话,你也可以复写(override)链接配置。

下面的例子里,我们的大多数表都在MySql数据库中,库名为online,由于一些历史原因,customers表在名为backend的数据库中,

ActiveRecord::Base.establish_connection(

:adapter => "mysql",

:host => "dbserver.com",

:database => "online",

:username => "groucho",

:password => "swordfish")

class LineItem < ActiveRecord::Base

# ...

end

class Order < ActiveRecord::Base

# ...

end

class Product < ActiveRecord::Base

# ...

end

class Customer < ActiveRecord::Base

# ...

end

Customer.establish_connection(

:adapter => "mysql",

:host => "dbserver.com",

:database => "backend",

:username => "chicho",

:password => "piano")

 

在我们前面所写的depot程序中,我们没有使用establish_connection方法,而是在config/database.yaml文件中指定了数据库连接的参数信息,对于大多数rails程序来说,这是首选的方式,不仅因为将配置信息和代码分离,而且在测试和部署时也能带来方便,上面的表格里列出的参数都可以应用在YAML文件中,这一点我们在前面的配置文件一节已经有介绍。

最后,如果你通过一个标记访问establish_connection(),Rails会在database.yaml文件中查找名字对应的配置节,来获取链接的参数,这样就可以将所有的数据库连接配置从代码中分离出来。

Feedback

#1楼    回复  引用    

2008-03-27 13:22 by mysen [未注册用户]
你的毅力将是我等ror小辈的学习目标,支持!

#2楼    回复  引用    

2008-03-27 13:41 by mill [未注册用户]
坚持就能成功!

#3楼 [楼主]   回复  引用  查看    

2008-03-27 13:59 by Cure      
@mysen
我也只是将书上的东西抄下来,还不能形成自己的什么认识,所以也还是个初学者,大家共勉:)

@mill
谢谢支持:)

#4楼    回复  引用    

2008-04-17 10:15 by little [未注册用户]
我有一个moudel中 这样写“establish_connection :master”。那是不是就是说有一个master的数据库连接存在。可是这个master数据库连接是放在那里的?

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-26 17:31 编辑过


相关链接: