2016-10-14 3 views
2

필자는 Rails 모델에 두 개의 객체 A와 B를 가지고 있는데,이 객체는 선택적인 일대일 관계가 있습니다. A는 0 또는 1 B를 가질 수 있습니다. 대부분의 경우 A는 0 B를가집니다.레일에있는 두 모델 객체 사이의 선택적 관계

또한 A와 다른 오브젝트 X, Y, Z 사이에 다른 관계를 도입 할 수 있습니다.

이들이 일대일 관계라면, A와 B 사이의 has-a 관계가 의미가 있습니다. 그러나 이것이 선택적이고 빈번하지 않은 관계이며 A와 함께 다른 관계가 도입 될 수 있다고 가정 할 때 각각의 새로운 관계에 대해 새로운 열을 추가하는 것이 의문의 여지가 있습니다.

이 관계를 어떻게 모델링하면 좋을까요? 이 특별한 경우에 A와 B 사이의 상관 관계 테이블을 사용하면 더 잘 이해할 수 있습니까?

답변

0

모델 A의 ID를 다른 모든 모델에 추가하면 모델 A는 각각에 대해 has_one이됩니다. 모델

0

나는 그 A에 새 열 b_id을 추가하고, 제시된 솔루션과 함께 갈 것을 belong_to 것

각각 다른.

다른 사람은 C 통해 A 액세스 B이 다음 두 a_idb_id 등을 보유하고 세 번째 모델 C를 만들 수 있습니다.

# Pluralization is off here. Remember to pluralize has_many 
class A < ActiveRecord::Base 
    has_many :c 
    has_many :b, through: :c 
end 

class B < ActiveRecord::Base 
    has_many :c 
    has_many :a, through: :c 
end 

class C < ActiveRecord::Base 
    belongs_to :a 
    belongs_to :b 
end 

이렇게하면 데이터베이스의 모든 null 값을 방지 할 수 있습니다. 이것은 릴레이션 주위에 무언가를 만들 때 가장 자주 사용하는 솔루션입니다. 이제 관계에 대한 더 많은 정보를 저장할 장소가 생겨 났기 때문입니다.

또한 C 다형성을 만들어 모든 모델 (A 만 해당)을 저장할 수 있습니다. http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

관련 문제