2017-01-08 4 views
0

私はRuby on Railsを勉強していて、ファイルとコードの構造と混同しています。 なぜRailsテーブルのフィールドはマイグレーションで定義されていますが、モデルでは定義されていませんか? 私は知っている、どのようなモデルが必要です。しかし、あらゆるフレームワークのようなレールは、開発者の作業を容易にし、汚れた作業をすべてフードの下に置くことを目指しています。 さらに、モデルと移行の両方でデータベースの関係を定義しますか? しかし、我々はただ一つの場所にそれらを定義し、自動的に別のものに移すことができ..なぜRailsテーブルのフィールドはマイグレーションで定義されていますが、モデルでは定義されていませんか?

答えて

4

をレールにテーブルのフィールドは、移行中にではなく、モデルで定義されているのはなぜ?

そうではありません。それらはデータベースに定義されています。移行が実行されたら、それらを削除することができ、モデルは引き続きテーブルの定義を完全に認識します。 SQL文やGUIツールを手動で実行するなど、他の方法でデータベースを構築することを選択した場合、Railsアプリケーションを構築して実行することもできます。

また、モデルと移行の両方でデータベースの関係を定義しますか?

いいえ、モデルのみです。移行は、データベースの変更を導入するためのものです。その目的は、データベースの変更を、アプリケーションコードの依存する変更と共に展開できるようにすることです。お使いのモデルで団体:

しかし、私たちはただ一つの場所にそれらを定義し、自動的に別のものに移すことができ..

あなたの関係は一つの場所で定義されてあります。あなたのデータベースは外部キーのような追加の制約を加えることができますが、Railsに関する限り、2つのモデルを関連付けるアソシエーションがない場合、それらのモデルはリンクされません。

+0

ActiveRecordはRuby全体の柔軟性を利用しているため、モデルの列をDBに設定するだけで済みます。 IMHOは、あなたのモデル、XMLまたはいくつかの曖昧なコードアノテーション言語にたくさんの属性を書く必要があることに比べて大きな利点があります。 – max

+0

ありがとうございます。しかし、私たちは引き続き移行ファイルに関連付けることができますか? – Liker777

+0

@ Liker777いいえ。移行で関連付けを行うことはできません。あなたのモデルには、関連付けは*のみ*存在します。移行によってデータベースに外部キーが導入される可能性がありますが、外部キーはActiveRecordの関連ではありません**。 – meagar

関連する問題