2013-12-10 4 views
4

STI, 다형성 연관 또는 유형 테이블간에 찢김이 있습니다. 난 이미 다음 필드가있는 단위 테이블이 :rails - 다형성 연관 또는 단일 테이블 상속

name 
account_id 
speed_limit 
is_speeding 
activation_state 
unit_status_id 

단위의 세 가지 다른 종류의 사실이있다 : GPS 기기, 석유 장치 및 냉장고 단위. 사용자가 로그인하면 웹 페이지가 어떤 유닛인지에 따라 조건이 변경됩니다. 이 세 가지 단위는 모두 다른 필드 중에서 계정, activation_state 및 unit_status_id를가집니다. 하지만 GPS 단위에만 speeding_limit 또는 is_speeding 필드가 있습니다.

나는 다형성 협회 사용해야

class Unit 
    belongs_to :unitable, :polymorphic => true 
end 

class RefrigeratorUnit < ActiveRecord::Base 
    has_one :units, as: => :unitable 
end 

class OilUnit < ActiveRecord::Base 
    has_one :units, as: => :unitable 
end 

class GpsUnit < ActiveRecord::Base 
    has_one :units, as: => :unitable 
end 

을 아니면 내가 단일 테이블 상속을 사용해야합니까?

class Unit < ActiveRecord::Base 
end 

class GpsUnit < Unit 
end 

class RefrigeratorUnit < Unit 
end 

class OilUnit < Unit 
end 

가 처음에 나는 속도 제한이없는 STI하지만 냉장고와 오일 단위쪽으로 생각이 기울고되었으며, 이는 내가 다형성 연관을 구현하기 시작하지만 실현 그들은 항상 values.So null의 의미 GPS 장치, 오일 장치가 , 또는 냉장고 단위는 결코 단위가 없습니다. 즉, 항상 has_one 관계가되며 사용자가 gps 단위를 만들면 단위도 생성됩니다. 그것은 조금 중복 된 것 같습니다. 그래서 나는 찢어진 다.

답변

2

나는 거꾸로 가지고 있다고 말하고 싶습니다. 3 가지 매우 다른 유형의 단위가 있습니다. 따라서 GpsUnit, OilUnit, FridgeUnit의 세 가지 단위 클래스가 있어야합니다.

그리고 그것을 따라 - 프로파일은 하나의 단위, 다음 프로필이있는 경우 :

belongs_to :unit, :polymorphic => true 

프로파일이 많은 단위가 할 수있는 경우를, 또는 단위가 일반적인 행동을 많이 가지고, 다음 STI는 대답은, 아마.

+0

실제로 "프로필"이 없습니다. 그것은 단지 나쁜 명명이었습니다. 실제로 GpsUnit, OilUnit 및 RefrigeratorUnit이 있습니다. 왜 당신은 다형성 협회보다 STI를 선호합니까? 그것은 정말로 제 질문입니다. – JohnMerlino

+1

사실 저는 여기에 모델링되는 것을 얻지 못합니다. – DeeY

+0

내 질문을 편집했습니다. 프로필이 없습니다. 프로필의 참조를 완전히 삭제했습니다. gpsunit, refrigeraterunit, oilunit이라는 세 가지 객체 만 있습니다. 속성의 대부분은 동일합니다. 그러나 gpsunit에는 다른 사람들에게는없는 과속 속성이 있습니다. 난 당신이 자신의 열이 다른 테이블을 만들 수 있었기 때문에 다형성 협회는 더 유연했다 생각. 그러나 사용자가 유닛을 만들면 유닛 테이블과 gpsunits 테이블에 레코드를 삽입해야합니다. 예를 들어 불필요한 것으로 보입니다. 그래서 나는 STI에 대해 생각하고 있습니다. – JohnMerlino