我正在尝试使用Rails连接到现有的Sybase数据库并填充一些选择列表。这是我到目前为止所做的:
1.安装和配置FreeTDS
2.安装TinyTDS gem
如果我执行命令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很陌生,所以我做错了什么?
谢谢!
答案 0 :(得分:1)
所有内容都直到生成名为sybase_db的模型的部分。 Rails中的模型通常链接到数据库中的特定表,而不是整个数据库。 Rails使用命名约定来简化表和列与模型和属性的链接。
例如,如果您的模型User
的属性name
和email
链接到数据库中名为users
且列{{1}的表然后,各种精彩的Rails魔法才起作用。您可以启动rails控制台并执行name
以生成数据库中所有用户的集合。或者你可能会做类似
email
但是,如果您有现有数据库,则可能需要更详细地向Rails解释如何将Sybase中的名称映射到Rails系统中的名称。您在User.all
中有一个这样的情况 - 如果您的Sybase表名为> u = User.find_by_email 'joe@example.com'
=> #<User id: 123, email: "joe@example.com", name: "Joe"...>
> u.name
=> "Joe"
且主键为set_table_name
但其列t_user
和user_id
然后你可以创建像
name
Here's a discussion of this topic on Quora with a couple good links你可能会用来进一步发展。
根据您现有系统的广泛程度,您可能会发现Rails的所有魔力都消失了。 Rails帮助我们避免所有这些映射到这一点,并遵循强大的命名约定,给我们各种美妙的冷静。如果您现有的系统具有强大且可预测的命名约定,并且与Rails的方式相差甚远,那么您可以成功使用Rails。