2

我正在尝试使用 Rails 连接到现有的 Sybase 数据库并填充一些选择列表。这是我到目前为止所做的:
1. 安装和配置
FreeTDS 2. 安装 TinyTDS gem

如果我执行 command 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

当我尝试在中运行SybaseDb.new命令时rails console,它似乎不起作用。我对 Rails 很陌生,所以我做错了什么?

谢谢!

4

1 回答 1

1

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

例如,如果您有一个User带有属性的模型,name并且email它链接到数据库中的一个名为users并具有列的表nameemail那么各种美妙的 Rails 魔法就会起作用。您可以启动 rails 控制台并执行User.all以生成数据库中所有用户的集合。或者你可能会做类似的事情

> u = User.find_by_email 'joe@example.com'
=> #<User id: 123, email: "joe@example.com", name: "Joe"...>
> u.name
=> "Joe"

但是,如果您有一个现有的数据库,那么您可能需要更详细地向 Rails 解释如何将 Sybase 中的名称映射到 Rails 系统中的名称。你有一个这样的例子——如果你的 Sybase 表是用主键set_table_name命名的,但它有列,那么你可以创建一个 Rails 模型,比如t_useruser_idnameemail

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

这是 Quora 上有关此主题的讨论,其中包含几个不错的链接,您可以使用这些链接进一步了解。

Depending on how extensive your existing system is, you may find that all of the magic of Rails goes away. Rails helps us avoid all of this mapping this to that, and follows strong naming conventions to give us all sorts of wonderful coolness. If your existing system has strong and predictable naming conventions, and isn't terribly far off from Rails' way, you might be able to use Rails successfully.

于 2012-10-11T03:24:43.517 回答