user : references vs user_id : integer를 사용하여 모델 생성
다른 모델에 속하는 모델을 생성하는 방법에 대해 혼란스러워합니다. 내 책은이 구문을 사용하여 Micropost를 사용자와 연결합니다.
rails generate model Micropost user_id:integer
그러나 http://guides.rubyonrails.org/ 는 다음과 같이 말합니다.
rails generate model Micropost user:references
이 2에서 생성 된 마이그레이션은 다릅니다. 또한 전자의 user_id
경우 외래 키 참조 라는 것을 레일은 어떻게 알 수 user
있습니까? 감사!
마이그레이션을 실행할 때 둘 다 동일한 열을 생성합니다. 레일 콘솔에서 다음과 같은 경우를 볼 수 있습니다.
:001 > Micropost
=> Micropost(id: integer, user_id: integer, created_at: datetime, updated_at: datetime)
두 번째 명령 belongs_to :user
은 Micropost 모델에 관계를 추가 하지만 첫 번째 명령은 관계를 추가 하지 않습니다. 이 관계가 지정되면 ActiveRecord는 외래 키가 user_id
열에 유지된다고 가정 User
하고 특정 사용자를 인스턴스화하기 위해 명명 된 모델을 사용합니다 .
두 번째 명령은 새 user_id
열에 색인을 추가합니다 .
Rails
user_id
는 외래 키 참조 라는 것을 어떻게 알 수user
있습니까?
Rails 자체는 그것이 user_id
외래 키 참조 라는 것을 모릅니다 user
. 첫 번째 명령에서는 rails generate model Micropost user_id:integer
열만 추가 user_id
하지만 레일은 col의 사용을 알지 못합니다. Micropost
모델에 선을 수동으로 넣어야합니다
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
키워드 belongs_to
와 has_many
이러한 모델 간의 관계를 결정하고 모델 user_id
의 외래 키로 선언 User
합니다.
이후 명령 은 모델에 rails generate model Micropost user:references
행 belongs_to :user
을 추가하고 Micropost
외래 키로 선언합니다.
참고
이전 방법을 사용하여 외래 키를 선언하면 모델 / 테이블과의 관계에 대해서만 Rails에 알릴 수 있습니다. 관계에 대한 데이터베이스를 알 수 없습니다. 따라서 소프트웨어를 사용하여 EER 다이어그램을 생성 할 때 MySql Workbench
모델간에 관계 스레드가 없다는 것을 알 수 있습니다. 다음 그림과 같이
그러나 이후 방법을 사용하면 마이그레이션 파일이 다음과 같은 것을 알 수 있습니다.
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
이제 외래 키는 데이터베이스 수준에서 설정됩니다. 적절한 EER
다이어그램을 생성 할 수 있습니다 .
전자의 경우 구성에 대한 규칙. 다른 테이블을 참조 할 때 레일스 기본값
belongs_to :something
를 찾는 것입니다 something_id
.
references
또는 belongs_to
몇 가지 단점으로 전자를 쓰는 새로운 방법입니다.
중요한 것은 외래 키를 만들지 않는다는 것을 기억하십시오. 그렇게하려면 다음 중 하나를 사용하여 명시 적으로 설정해야합니다.
t.references :something, foreign_key: true
t.belongs_to :something_else, foreign_key: true
또는 (복수 참고) :
add_foreign_key :table_name, :somethings
add_foreign_key :table_name, :something_elses`
참고 URL : https://stackoverflow.com/questions/7861971/generate-model-using-userreferences-vs-user-idinteger
'IT' 카테고리의 다른 글
JavaScript 파일을 HTML 파일에 어떻게 연결합니까? (0) | 2020.05.26 |
---|---|
분산 해시 테이블 (DHT)에 대한 간단한 기본 설명 (0) | 2020.05.26 |
서버 측 API를 통해 Google 웹 로그 분석에 이벤트를 게시 할 수있는 방법이 있습니까? (0) | 2020.05.26 |
Swift에서 약한 참조 배열을 어떻게 선언합니까? (0) | 2020.05.26 |
MySQL에서 INDEX와 KEY를 사용하는 것의 차이점은 무엇입니까? (0) | 2020.05.26 |