1

その内容にデータベースを使用しているWebインターフェースがあります。データベースは、標準に従わずにほぼ任意に設計されています。

このデータベースの上にいくつかのAPIを書きたいと思います。私のフロントエンドはこれらのAPIを使用します。

ORMとしてActiveRecordを使用しています。問題は、既存のテーブルに関連付けや結合を定義できないことです。これらの操作は両方ともid、参照されるテーブルで指定された列を想定しているためです。

既存のデータベーススキーマを調整したくない場合、それを実行する方法は何ですか?

4

4 に答える 4

3

関連付けを定義するときは、:foreign_keyや:primary_keyなどの追加オプションを使用して、そのようなフィールド名の詳細を指定できます。

belongs_to :person, :primary_key => "name", :foreign_key => "person_name"
于 2013-01-14T13:05:01.717 に答える
2

以前、私はActiveRecordを使用してレガシーデータベースを操作しようとしましたが、成功しましたが、そうすることで、私は間違いなく流れに逆らいました。ActiveRecordは、異なる命名規則を持つフィールドとテーブルを使用したくなかったため、多くの作業が必要でした。それ以来、それはもう少し文明化され、「ここで発明されていない」という態度でより寛大になっています。しかし、それは町の唯一のORMでもありません、そして私はこの種のタスクのためにSequelの大ファンになりました。

ActiveRecordの代わりにSequelを使用できます。これは優れたORMであり、レガシーデータベースとうまく連携します。:id期待される形式にマップされない場合は、すべての実際のフィールド名とテーブル名を指定するとともに、フィールドを定義できます。

Sequelの仕組みの概要については「チートシート」を、ActiveRecord使用するためにActiveRecordを置き換える方法については「ActiveRecordユーザー向けの続編」をご覧ください。

使用する:

続編トークグループは非常に活発で、助けが必要な場合は正しい方向にあなたを向けることができます。そして、主な著者であるJeremy Evensは、プロジェクトリーダーの優れた例です。彼は常に助けてくれました。

于 2013-01-14T13:28:34.667 に答える
0

Railsの代わりにSinatraを使用することを検討してください。「醜い」データベースにAPIを提供するだけの場合は、activerecordから始めないでください。

ルートを追加し、アクションでSQLステートメントを直接定義します。activerecordの期待をいじくり回すよりもコストがかかるべきではありません。

于 2013-01-14T13:07:17.443 に答える
0

私はあなたのためにいくつかのオプションを見ます:

  1. ActiveRecordを念頭に置いてスキーマを再構築してから、古いデータを新しいスキーマにインポートするスクリプトを作成します。(時間がかかりますが、最良のソリューションIMO)
  2. ActiveRecordを使用せず、代わりにデータベースに直接アクセスします。(ぶさいくな)
  3. Thorstenmüllerが示唆するように、古いデータでActiveRecordを使い続け、キーなどとして使用する列をRailsに指示する特別な引数を使用します(最も醜い、かなりの数のハックアラウンドが必要になります)

これらのいずれかを選択することは、要件に大きく依存します-実行する速度、古いデータを保持する必要がある場合(この場合、1を使用することはできません)、現在のスキーマがどのように混乱しているかなどです。 。、しかし私はあなたがオプション1に向かってプッシュしようとするべきだと思います。

于 2013-01-14T13:15:27.357 に答える