1

私は Rails 環境をセットアップしていません。これについては、実際にはすぐに答えを見つけるのが非常に難しいので、専門家に尋ねます。

設定した「モデル」に基づいて Rails がテーブルを作成するとき、Rails はこのモデルを正確に反映するテーブルを作成しますか?それとも、テーブルにフィールドを追加して魔法のように機能させるのですか? もしそうなら、それは他にどのようなフィールドを追加し、その理由は何ですか? おそらく、テーブル構造を切り取って貼り付けるか、これに対処するドキュメントまたはチュートリアル セクションを参照してください。

4

4 に答える 4

6

新しいデータベースを含む完全に新しいアプリケーションを構築している場合は、移行を使用してバックエンド全体を構築できます。ランニング

ruby script/generate model User name:string

モデルと移行の両方の user.rb ファイルを生成します。

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

デフォルトでは、生成スクリプトが (作成および最終更新) の「タイムスタンプ」を追加し、存在し続けることが許可されている場合、それらは自動的に管理されることがわかります。

見えませんが重要なのは、追加の列「id」が単一の主キーになるように作成されていることです。ただし、必須ではありません。モデルに独自の主キーを指定できます。これは、レガシー スキーマを使用している場合に便利です。idをキーとして保持すると仮定すると、Rails は新しいキー値に使用できる RDBMS 固有の機能を使用します。

于 2008-10-06T07:32:16.977 に答える
5

ActiveRecord では、モデルはデータベース テーブルから作成されますが、その逆ではありません。

また、Ruby コードからデータベースを記述および作成する方法である Migrations を調べることもできます。ただし、移行はモデルとは関係ありません。モデルは、データベースの形状に基づいて実行時に作成されます。

Rails サイトには ActiveRecord と Migrations に関連するスクリーンキャストがあります: http://www.rubyonrails.org/screencasts

于 2008-10-06T06:15:29.987 に答える
1

レガシーデータベースをRailsに移動し、外部スクリプトからRailsデータベースにアクセスした経験は少しあります。それはあなたがやろうとしていることのように聞こえます。私の経験はMySQL上に構築されたRailsデータベースであるため、マイレージは異なる場合があります。

1つの非表示フィールドが最も明白です---Railsがデフォルトの主キーとして使用する「id」フィールド(整数)。特に指定しない限り、Railsの各モデルには、一意の増分整数主キーである「id」フィールドがあります。この「id」フィールドは、Railsにそうしないように指示しない限り(主キーとして別のフィールドを指定することによって)、移行によってRails内で生成されたすべてのモデルに自動的に表示されます。Rails自体の外部からRailsデータベースを操作する場合は、この値に注意する必要があります。

「id」フィールドは、Railsの関連付けを定義するために使用されるため、Railsの魔法の重要な部分です。2つのテーブルを相互に関連付けるとしましょう---グループと個人。Groupモデルには「id」フィールドがあり、Personモデルには独自の「id」フィールドとリレーションシップの「group_id」フィールドの両方が必要です。「group_id」の値は、関連付けられたグループの一意のIDを参照します。Railsの規則に従う方法でモデルを構築した場合は、Groupモデルが「has_many:people」であり、Personモデルが「belongs_to:group」であると言うことで、Railsの関連付けを利用できます。

Railsの移行では、デフォルトで、日時フィールドである「created_at」フィールドと「updated_at」フィールド(いわゆる「タイムスタンプ」)も追加する必要があります。デフォルトでは、これらはデータベースの「魔法」を利用しており、Rails自体ではなく、レコードが作成または変更されるたびに自動的に更新されます。これらの列は、特別なRailsの魔法ではなく、データベースレベルで処理する必要があるため、つまずくことはないと思います。

于 2008-10-09T23:51:19.277 に答える
1

ActiveRecord の公式ドキュメントは次のとおりですそれはブラッドに同意します。別のアクセス方法または移行 (テーブルを変更してモデルを変更する) を見たことがあるかもしれません。

于 2008-10-06T06:24:49.110 に答える