2

私はレールの初心者であり、それは素晴らしいプラットフォームです。

アプリケーションを作成しましたが、すべての移行スクリプトを削除しました。

既存のモデルのテーブルを使用してデータベースを作成したいと考えています。

私はそれをネット上で見つけることができず、他のプラットフォーム (Java hibernate など) のようにそれを行うためのオプションであると確信しています。

コマンドレールが生成します...列のないテーブルのみを作成しますが、既存のモデルに列があります。どうすればそれを行うことができますか?

ありがとう!

4

2 に答える 2

6

誤ってモデルをスクラブしてしまい、マイグレーションがない場合でも、代わりにそれをdb/schema.rb実行して使用することでファイルを生成できますrake db:migrate。データベースに対して何を行ったかに関係なく、データベースの現在の状態を反映する必要があります。

これの重要な部分を含む移行を作成すると、形式が非常に似ていることに気付くと思いますが、その構成を他のシステムに複製することができます。

ただし、これは少し手間のかかる方法です。各モデルには、関連付けられた移行が必要です。通常、これらは決して削除されず、厳密に必要な場合にのみ変更され、スキーマがどのように最終状態に発展したかの履歴を保持します。

于 2012-12-18T06:52:24.257 に答える
2

私があなたの質問を正しく理解していれば、ActiveRecord モデル クラスからデータベース テーブルを構築する方法は実際にはありません。ActiveRecord モデルは、さまざまな種類のリレーショナル データベースと Ruby オブジェクトの間のマッピングと考えるのが最善です。つまり、ActiveRecord モデルは、データベースに依存しないようにするために、データベースの詳細を抽象化します。これにより、Ruby でデータベース データに簡単にアクセスできるようになります。そうすることで、彼らはあなたのテーブルを構築する力を持っていません. データベースへのバインドではなく、非常にきれいなゲッターとセッターと考えてください。

これがまさに移行が存在する理由です。移行にはデータベース固有のものが含まれています。それらは本質的にモデル定義の「残りの半分」を含んでいます - ほとんどのアプリケーション レベルのもの (リレーションのようなもので、MySQL には存在しませんよね? それらは ActiveRecord 規則です) はモデルで定義されていますが、たとえば、Foo モデルに文字列が必要な場合は、migrationでそれを定義すると、適切なゲッターとセッターがモデルで使用可能になり、この文字列を操作できます。

tl;dr: 移行が必要です。それらが Rails に存在するという事実は、モデルの Ruby の半分をデータベースの半分から分離するという意図的な設計上の決定です。

于 2012-12-18T06:55:38.667 に答える