답변:
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
또한 인덱스를 생성한다.
위에서 언급 한 두 가지 단계를 수행해도 여전히 외래 키 제약 조건이 없습니다. 이것은 작동해야합니다 :
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
Rails 3.2를 사용하여 롤백 할 때 얻었습니다 . 또한로 변경 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
레일 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
레일 3
도우미는 참조라고도합니다 (라고도 함 belongs_to
).
이 마이그레이션은 category_id
적절한 유형 의 열을 생성합니다 . 열 이름이 아닌 모델 이름을 전달합니다. 액티브 레코드가 _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