2

非標準のテーブル名とフィールド名を持つ既存のレガシー Firebird データベースがあります。

それにアクセスして情報を表示できる Sinatra アプリを作成したいと思います。データベースに適切な命名規則がある場合に機能するように見える dm-is-reflective のようなものを見てきましたが、DataMapper (または最も簡単な ActiveRecord) を使用してこれらのテーブルにアクセスするにはどうすればよいですか?

たとえば、次の 2 つのテーブルがあるとします。

Bookshelfs
    shelf_id: integer
    level: integer
    created: timestamp

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

設定されたパターンに従わない奇妙な命名規則や、foreign_key が割り当てられていなくても、あるテーブルのレコードが別のテーブルの複数のエントリを「所有」するようなものです。

データマッパー (またはアクティブレコード) と通信するようにどのように設定しますか?

4

2 に答える 2

2

このgemを調べて、Sinatraで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
于 2012-09-26T17:42:44.070 に答える
1

ActiveRecordのFirebirdアダプターを使用してレガシーデータベースに接続する方法を理解したと仮定すると、次に行うことは、各テーブルの上にビューを定義することです。

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

このようにして、通常どおりActiveRecordでモデルBookとBookshelfを定義するだけで、データベース内の適切な場所にすべてが見つかります。

于 2012-09-26T20:31:07.197 に答える