답변:
수동으로 수행하십시오.
add_column :post, :author_id, :integer
하지만 이제는 belongs_to 문을 만들 때 수정해야하므로 이제 다음을 호출해야합니다.
def post
belongs_to :user, :foreign_key => 'author_id'
end
schema_plus
gem을 사용하여 t.references :category, index: true, foreign_key: true, references: :match_categories
마이그레이션 파일에서도 저를 위해 일했습니다.
Post
모델 테이블을 정의하는 경우 references
, index
및 foreign_key
한 줄로 설정할 수 있습니다 .
t.references :author, index: true, foreign_key: { to_table: :users }
기존 테이블에 대한 참조를 추가하는 경우 다음을 수행 할 수 있습니다.
add_reference :posts, :author, foreign_key: { to_table: :users }
참고 : 의 기본값 index
은 true입니다.
null
s를 허용 합니다. 허용하지 않으려면 일반적인 옵션을 추가하세요 null: false
.
Rails 4.2 이상 에서는 db 에서도 외래 키 를 설정할 수 있습니다 . 이는 좋은 생각 입니다.
간단한 연결의 경우 t.references
추가 할 때도 수행 할 수 foreign_key: true
있지만이 경우 두 줄이 필요합니다.
# The migration
add_reference :posts, :author, index: true
add_foreign_key :posts, :users, column: :author_id
# The model
belongs_to :author, class_name: "User"
references: :users
옵션 이 필요한지 잘 모르겠습니다 add_reference
. 나는 문서에 문서화되어 있지 않으며 그것 없이는 내 끝에서 작동하는 것 같습니다.
레일 4에서는 postgresql과 schema_plus gem을 사용할 때 다음과 같이 작성할 수 있습니다.
add_reference :posts, :author, references: :users
이렇게하면 author_id
올바르게 참조 하는 열이 생성 됩니다 users(id)
.
그리고 모델에서
belongs_to :author, class_name: "User"
새 테이블을 만들 때 다음과 같이 작성할 수 있습니다.
create_table :things do |t|
t.belongs_to :author, references: :users
end
참고 :
schema_plus
gem은 전체적으로 rails 5+와 호환되지 않지만,이 기능은 rails 5와 호환되는 gem schema_auto_foreign_keys (schema_plus의 일부)에서 제공됩니다 .
create_table
:t.references :author, references: :users
:references
실제로 어떤 일을하는 증거를 찾을 수 없습니다 .
schema_plus
보석을 사용해 왔으며 실제로 그 기능을 추가하고 있습니다. 그에 따라 내 대답을 편집했습니다.
t.references :col_name, references: other_table_name
추가 gem을 설치하지 않고도 구문이 작동 하는 것처럼 보입니다 .
외래 키를 사용하지 않는 경우 다른 테이블의 실제 테이블 이름이 무엇인지는 중요하지 않습니다.
add_reference :posts, :author
Rails 5 부터 외래 키를 사용하는 경우 외래 키 옵션에서 다른 테이블의 이름을 지정할 수 있습니다. ( 토론 은 https://github.com/rails/rails/issues/21563 참조 )
add_reference :posts, :author, foreign_key: {to_table: :users}
Rails 5 이전에는 외래 키를 별도의 단계로 추가해야합니다.
add_foreign_key :posts, :users, column: :author_id
{to_table: :users}
alias_attribute (new_name, old_name) 는 매우 편리합니다. 모델과 관계를 만드십시오.
rails g model Post title user:references
그런 다음 모델을 편집하고 다음을 사용하여 속성 별칭을 추가합니다.
alias_attribute :author, :user
그 후에는 다음과 같은 것을 실행할 수 있습니다.
Post.new(title: 'My beautiful story', author: User.first)