2012-09-26 72 views
2

我有一個現有的傳統Firebird數據庫與非標準表和字段名稱。Sinatra與現有數據庫(不遵守命名約定)

我想寫一個可以訪問它並顯示信息的Sinatra應用程序。我看到dm-is-reflective這樣的東西似乎在數據庫有適當的命名約定時工作,但是如何使用DataMapper(或ActiveRecord,以最簡單的方式)來訪問這些表?

例如,假設我有這兩個表:

Bookshelfs 
    shelf_id: integer 
    level: integer 
    created: timestamp 

Book 
    id: integer 
    id_of_shelf: integer 
    title: string 
    pages: integer 

喜歡的東西奇數命名約定不遵循任何設置模式和其中一個表的記錄可能「自己」多發於另一個表條目甚至雖然沒有分配foreign_key。

你將如何設置datamapper(或activerecord)與它通信?

回答

2

看在這個寶石獲得安裝用ActiveRecord上西納特拉: https://github.com/bmizerany/sinatra-activerecord

至於如何界定關係,ActiveRecord的可以很容易地做到這一點。

class Book < ActiveRecord::Base 
    belongs_to :bookshelf, :class_name => 'Bookshelf', :foreign_key => 'id_of_shelf' 
end 

class Bookshelf < ActiveRecord::Base 
    has_many :books, :class_name => 'Book', :foreign_key => 'id_of_shelf' 
end 
+0

這是否只適用於postgress,sqlite3或myssql?我需要與Firebird合作。 –

+0

activerecord的要點是獨立於關係數據庫。所以只要你想使用的任何數據庫都是關係型數據庫,它可能適用於ActiveRecord。只是看,它看起來像火鳥支持:http://apidock.com/rails/ActiveRecord/ConnectionAdapters/FirebirdAdapter – weexpectedTHIS

+0

謝謝。我會試試看。 –

1

假設你想通了如何連接到使用ActiveRecord的火鳥適配器你的遺留數據庫,接下來的事情我會做的是對每個表的頂部,例如定義視圖

CREATE VIEW books AS SELECT * FROM Book; 
CREATE VIEW bookshelves AS SELECT * FROM Bookshelfs; 

這種方式可以簡單地定義模型圖書和書架的ActiveRecord按通常它會發現在數據庫中正確的地方的一切。

+0

謝謝你的幫助 –