0

단일 모델에 세 개의 외부 ID가 필요한 상황이 있습니다. 이 표에는 세 가지 모델에 속하는 정보가 있습니다.레일스 활성 레코드 모델 관계 - 세 모델에 속한 한 모델

- 세 가지 모델 - 키보드, 마우스, 모니터 이제 keyboard1, mouse1 및 monitor1과 같은 조합에 대한 정보가있는 네 번째 모델 세부 정보를 얻었습니다.

그럼이 용도로 사용할 수있는 디자인 패턴은 무엇입니까?

은 지금 내가 무엇을 사용 Detail.find_by_keyboard_id_and_mouse_id_and_monitor_id (keyboard1id, mouse1id, monitor1id) # => Detail1 갈 수있는 가장 좋은 방법은 아니다 물론

...

답변

1

내가 생각하지 않는 것입니다 당신이 가지고있는 것은 나쁜 디자인입니다. 이 방법을 구현하는 방법에 대한 옵션이 너무 많지는 않지만 사용 방법에 대해 생각해야합니다. 개인적으로, 나는 모델을 이라고 부르지 않을 것이다. Detail 모델이 실제로 무엇인지에 관해서는 알려주지 않기 때문에. 예 : 하드웨어 구성이 더 명확합니다. 어쩌면 너무 길 수도 있지만 취향에 따라 HardwareConfig 또는 Configuration으로 줄일 수 있습니다.

이 모델에는 ID와 세 개의 외래 키가 있어야합니다. 각 외래 키 필드에도 데이터베이스 인덱스를 추가해야합니다.

class Detail < ActiveRecord::Base 
    belongs_to :keyboard 
    belongs_to :mouse 
    belongs_to :monitor 
end 

다음 각 하드웨어 모델은 have_many 것 : 세부 사항과 같은 :

class Keyboard < ActiveRecord::Base 
    has_many :details 
end 

당신은 그것의 ID, 또는 외부 키의 조합에 의해 세부 콤보를 찾아 볼 수 있습니다.

Detail.find(id) 
Detail.find_all_by_keyboard_id(keyboard_id) 
+0

감사합니다 ... 실제로 방금 원래 프로젝트에서 데이터베이스 이름을 변경했습니다. 이 문제를 해결하기 위해 어떤 패턴이나 모범 사례가 궁금합니다. – rtdp