2012-10-11 245 views
2

我尝试使用Rails连接到现有的Sybase数据库并填充一些选择列表。这是我迄今所做的:
1.安装和配置freetds的
2.安装TinyTDS宝石Ruby on Rails现有的Sybase数据库

如果我执行命令tsql -S serverName -U userName,我能够查询数据。我有我的config/database.yml这样配置:

development: 
    adapter: sybase 
    host: <sybase_host> 
    port: <port_no> 
    username: <user> 
    password: <password> 
    database: <db> 

我又试图通过rails generate model sybase_db --skip-migration生成模型和编辑创建app/models/sybase_db.rb文件,如下所示:

class SybaseDb < ActiveRecord::Base 
    set_table_name "my_sybase_table" 
end 

当我尝试在rails console运行SybaseDb.new命令,它似乎没有工作。我对Rails很新,所以我做错了什么?

谢谢!

+1

你可以展开“似乎没有工作”? –

+0

你在'Gemfile'中有什么可以让'adapter:sybase'在'database.yml'中工作?我一直试图使用'activerecord-sqlanywhere-adapter'无效 – mmcrae

回答

1

一切都看起来正好是您生成名为sybase_db的模型的部分。 Rails中的模型通常链接到数据库中的特定表,而不是整个数据库。 Rails使用命名约定来简化表和列到模型和属性的链接。

例如,如果您有链接到一个表在数据库中的属性nameemail模型User称为users且列nameemail然后各种精彩的Rails魔术只是工作的。您可以启动导轨控制台并执行User.all以生成数据库中所有用户的集合。或者你可以做这样的事情

> u = User.find_by_email '[email protected]' 
=> #<User id: 123, email: "[email protected]", name: "Joe"...> 
> u.name 
=> "Joe" 

如果你有一个现有的数据库,但是,机会是你将有更多的细节解释到Rails如何在Sybase的名称映射到那些在你的Rails系统。你有这样的一个情况下,set_table_name - 如果Sybase表被评为t_useruser_id一个主键,但它有列nameemail那么你可以创建一个Rails模型像

class User < ActiveRecord::Base 
    set_table_name "t_user" 
    set_primary_key "user_id" 
end 

Here's a discussion of this topic on Quora with a couple good links,你可以使用走得更远。

根据现有系统的多样性,您可能会发现Rails的所有魔力都消失了。 Rails帮助我们避免了所有这种映射,并且遵循强大的命名约定来给我们带来各种美妙的冷静。如果现有的系统具有强大且可预测的命名约定,并且与Rails的方式相差不远,那么您可能能够成功使用Rails。

+0

什么是连接到Sybase的良好宝石? – mmcrae