0

私の知る限り、 db/migrations 内でモデル フィールドのデータ型を指定します。これは、Django の場合と同様に私にとって新しいことです。Model クラスでモデル フィールドのデータ型を直接指定できます。これについて私は正しいと思いますか?これはレールで一般的な方法ですか、それとも回避策を使用しているだけですか?

また、この db/migrations ファイルでテーブルの関係をどのように指定しますか。たとえば、クラス A と呼ばれるモデルがあるとします。

クラス B と呼ばれる別のモデルがあり、クラス A との 1 対多の関係が必要です。

class ClassA < ActiveRecord::Migration
  def change
    create_table :projects do |t|
      t.classB :name
    end
  end
end

移行ファイルとモデル ファイルに構文エラーがないことを検証するにはどうすればよいですか。私の知る限り、rake db:migrate を実行しただけですが、ファイルでフィールドのデータ型を指定したため、移行ファイルを置き換えたくない場合はどうすればよいでしょうか?

4

3 に答える 3

3

さて、全体として、3 つの質問があるようです。

1.: 私の知る限り、db/migrations 内でモデル フィールドのデータ型を指定します。[...] これについての私の考えは正しいですか? これはレールで一般的な方法ですか、それとも回避策を使用しているだけですか?

はい、これについては正しいです。フィールドのデータ型はモデル内では表示されず、移行でのみ表示されます。

ところで、移行ファイルを手動で作成していることはめったにありません。rails コマンドを使用すると、マイグレーション ファイルが自動的に生成されます。たとえば、

rails g model User first_name:string last_name:string

idこれにより、User というモデルと、フィールド、first_namelast_name、およびタイムスタンプ フィールドを持つ users テーブルを作成する移行が作成されます。後で列を追加または削除したい場合は、そのための巧妙なトリックがあります。とにかく走れ

rails g migration add_fields_to_users field_name:field_type

また

rails g migration remove_fields_from_users field_name.

field_namefield_typeおよびを適切と思われるように置き換えusersます。このコマンドは、フィールドを追加または削除するための移行を作成するため、それらを手動で記述する必要はありません。

2.: また、この db/migrations ファイルでテーブルの関係をどのように指定しますか。

あなたはそうしない。Rails は、has_many、belongs_to、has_and_belongs_to などの関連付けメソッドを通じてこれを処理します。この Rails guide to active record associations をご覧ください。データベース側で行う必要があることの 1 つは、1 対多のリレーションシップ用にforeign_id 列を追加するか、多対多のリレーションシップ用に結合テーブルを作成することです。たとえば、 users テーブルと pictures テーブルがあり、それぞれの写真がユーザーに属している場合、 user モデルhas_many :picturesでは 、picture モデルでは 、 pictures テーブルでは で呼び出されるbelongs_to :userフィールドが必要です。user_id整数型。

3.: 移行ファイルとモデル ファイルに構文エラーがないことを検証するにはどうすればよいですか。

あなたもそうではありません。を実行するだけでrake db:migrate、何かが失敗した場合、場所と理由が表示されます。モデルに構文エラーがある場合は、サーバーを起動したとき、テストを実行したとき、または少なくともどこかでモデルを使用したとき (たとえば、モデルのメソッドを呼び出したとき) に通知されます。モデルのデータをどのように検証するかを意味している場合、これはまったく別の質問です。アクティブなレコードの検証とコールバックに関するこのガイドを参照してください。存在、一意性、長さなどを確認するための検証について詳しく説明しています。

于 2013-03-02T18:57:56.307 に答える
2

あなたはいくつかの質問をしました、一つずつ行きましょう:

私の知る限り、 db/migrations 内でモデル フィールドのデータ型を指定します。これは、Django の場合と同様に私にとって新しいことです。Model クラスでモデル フィールドのデータ型を直接指定できます。これについて私は正しいと思いますか?これはレールで一般的な方法ですか、それとも回避策を使用しているだけですか?

移行は、データベースを変更するために使用されます。移行の例:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.text :description
    end
  end
end

これを実行すると、name という文字列フィールドを持つテーブル products が作成されます。はい、移行でモデル フィールドのデータ型を指定します。

また、この db/migrations ファイルでテーブルの関係をどのように指定しますか。たとえば、クラス A と呼ばれるモデルがあるとします。

モデルで関係 (または関連付け) を指定する必要があります。これは本当によく説明されているので、読んでください。ただし、多対多の関連付け用に結合テーブルを作成したり、has_many 関連付け用に別のテーブルを参照する列を作成したりする必要がある場合があるため、移行では関連付けを作成するためになんらかの作業を行う必要があることを考慮してください。

移行ファイルとモデル ファイルに構文エラーがないことを検証するにはどうすればよいですか。私の知る限り、rake db:migrate を実行しただけですが、ファイルでフィールドのデータ型を指定したため、移行ファイルを置き換えたくない場合はどうすればよいでしょうか?

この質問であなたが何を意味するのかわかりません。

于 2013-03-02T18:59:30.853 に答える
1

新しいモデル レールを作成すると、Shema 移行ファイルとモデルが作成されます。移行ファイルで、列を指定します。ここにコードを追加することは可能ですが、できる限り少なくする必要があります。上下の場合は、ここで列を追加/削除し、db インデックスなどを追加します。

モデルでは、リレーションbelongs_to、テーブルhas_manyなどを定義し、モデルのメソッドを定義します。scopesモデルはテーブルの列を継承するため、直接アクセスできます。

私は Django を知りません。これは Rails の一般的な方法です。

ここで確認できる関係やその他の良い情報: http://www.tutorialspoint.com/ruby-on-rails/rails-models.htm

于 2013-03-02T18:52:10.807 に答える