2012-10-11 248 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