Rails에서 has_one과 own_to의 차이점은 무엇입니까?[복제하다]
-
21-08-2019 - |
문제
이 질문에는 이미 답변이 있습니다.
나는 이해하려고 노력하고 있습니다 has_one
RoR의 관계.
두 가지 모델이 있다고 가정 해 보겠습니다. Person
그리고 Cell
:
class Person < ActiveRecord::Base
has_one :cell
end
class Cell < ActiveRecord::Base
belongs_to :person
end
그냥 사용해도 되나요 has_one :person
대신에 belongs_to :person
~에 Cell
모델?
똑같지 않나요?
해결책
아니요, 서로 바꿔 사용할 수 없으며 실제적인 차이점이 있습니다.
belongs_to
이는 외래 키가 이 클래스의 테이블에 있음을 의미합니다.그래서 belongs_to
외래 키를 보유한 클래스에만 들어갈 수 있습니다.
has_one
이는 이 클래스를 참조하는 다른 테이블에 외래 키가 있음을 의미합니다.그래서 has_one
다른 테이블의 열에서 참조하는 클래스에만 들어갈 수 있습니다.
그래서 이것은 잘못된 것입니다:
class Person < ActiveRecord::Base
has_one :cell # the cell table has a person_id
end
class Cell < ActiveRecord::Base
has_one :person # the person table has a cell_id
end
그리고 이것도 잘못된 것입니다:
class Person < ActiveRecord::Base
belongs_to :cell # the person table has a cell_id
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
올바른 방법은 (만약 Cell
포함 person_id
필드):
class Person < ActiveRecord::Base
has_one :cell # the person table does not have 'joining' info
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
양방향 연결을 위해서는 각각 하나씩이 필요하며 올바른 클래스에 들어가야 합니다.단방향 연결의 경우에도 어떤 연결을 사용하는지가 중요합니다.
다른 팁
"속성 _to"를 추가하면 양방향 협회가 있습니다. 그것은 당신이 세포에서 사람을 얻을 수 있고 그 사람의 세포를 얻을 수 있음을 의미합니다.
실제 차이는 없습니다. 두 가지 접근 방식 ( "SONGS_TO"가 있거나없는 경우)은 동일한 데이터베이스 스키마 (셀 데이터베이스 테이블의 Person_ID 필드)를 사용합니다.
요약하려면 : 모델 간의 양방향 연관성이 필요하지 않는 한 "속임수 _to"를 추가하지 마십시오.
둘 다 사용하면 사람과 셀 모델 모두에서 정보를 얻을 수 있습니다.
@cell.person.whatever_info and @person.cell.whatever_info.