回答:
Rails 4.xを使用している場合は、次のように、参照付きのマイグレーションを生成できます。
rails generate migration AddUserRefToProducts user:references
あなたがレールガイドで見ることができるように
編集:これは古い回答であり、Rails 4.x +には適用しないでください
参照されるクラスに整数IDを使用できる場合は、参照を追加する必要はありません。
単純な整数の代わりに参照を使用する利点は、モデルがbelongs_toで事前定義されていることです。モデルはすでに作成されており、既存のものを移行しても影響を受けないため、目的はある程度失われます。
だから私は代わりにこれをしたいと思います:
rails g migration add_user_id_to_tester user_id:integer
次に、テスターモデルにbelongs_to:userを手動で追加します
その列にもインデックスが必要になる可能性が高いことに注意してください。
class AddUserReferenceToTester < ActiveRecord::Migration
def change
add_column :testers, :user_id, :integer
add_index :testers, :user_id
end
end
user.testers
、インデックスを省略できます。
rails g migration ...
生成されたadd_reference :installs, :device, index: true
、インデックスを作成します。
上記の2つの前のステップでは、外部キー制約がまだありません。これはうまくいくはずです:
class AddUserReferenceToTester < ActiveRecord::Migration
def change
add_column :testers, :user_id, :integer, references: :users
end
end
あなたはすることができます変更の移行で参照を使用します。これは有効なRails 3.2.13コードです。
class AddUserToTester < ActiveRecord::Migration
def change
change_table :testers do |t|
t.references :user, index: true
end
end
def down
change_table :testers do |t|
t.remove :user_id
end
end
end
cf:http : //apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
down
に取得しましActiveRecord::IrreversibleMigration
た。私もに変更する必要がありchange
ましたup
。
実行rails g migration AddUserRefToSponsors user:references
すると、次の移行が生成されます。
def change
add_reference :sponsors, :user, index: true
end
列を追加するときは、その列を整数にし、可能であればレールの規則に従う必要があります。したがって、あなたのケースでは、テスターとユーザーのモデル、テスターとユーザーのテーブルがすでにあると想定しています。
外部キーを追加するには、user_id(規則)という名前の整数列を作成する必要があります。
add_column :tester, :user_id, :integer
次に、belongs_toをテスターモデルに追加します。
class Tester < ActiveRecord::Base
belongs_to :user
end
また、外部キーのインデックスを追加することもできます(これは、参照ですでに行われています)。
add_index :tester, :user_id
それはトリックを行います:
rails g migration add_user_to_tester user_id:integer:index
Rails 4の場合
ジェネレータは、列タイプを参照として受け入れます(としても利用可能belongs_to
)。
この移行により、user_id
列と適切なインデックスが作成されます。
$ rails g migration AddUserRefToProducts user:references
生成する:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :products, :user, index: true
end
end
http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration
Rails 3の場合
ヘルパーは参照と呼ばれます(としても利用可能belongs_to
)。
この移行category_id
により、適切なタイプの列が作成されます。列名ではなくモデル名を渡すことに注意してください。Active Recordは_id
あなたのために追加します。
change_table :products do |t|
t.references :category
end
多態的なbelongs_to
関連付けがある場合、参照により必要な列の両方が追加されます。
change_table :products do |t|
t.references :attachment, :polymorphic => {:default => 'Photo'}
end
attachment_id列とattachment_type
デフォルト値がの文字列列を追加しますPhoto
。
http://guides.rubyonrails.org/v3.2.21/migrations.html#creating-a-standalone-migration