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 단위를 만들면 단위도 생성됩니다. 그것은 조금 중복 된 것 같습니다. 그래서 나는 찢어진 다.
실제로 "프로필"이 없습니다. 그것은 단지 나쁜 명명이었습니다. 실제로 GpsUnit, OilUnit 및 RefrigeratorUnit이 있습니다. 왜 당신은 다형성 협회보다 STI를 선호합니까? 그것은 정말로 제 질문입니다. – JohnMerlino
사실 저는 여기에 모델링되는 것을 얻지 못합니다. – DeeY
내 질문을 편집했습니다. 프로필이 없습니다. 프로필의 참조를 완전히 삭제했습니다. gpsunit, refrigeraterunit, oilunit이라는 세 가지 객체 만 있습니다. 속성의 대부분은 동일합니다. 그러나 gpsunit에는 다른 사람들에게는없는 과속 속성이 있습니다. 난 당신이 자신의 열이 다른 테이블을 만들 수 있었기 때문에 다형성 협회는 더 유연했다 생각. 그러나 사용자가 유닛을 만들면 유닛 테이블과 gpsunits 테이블에 레코드를 삽입해야합니다. 예를 들어 불필요한 것으로 보입니다. 그래서 나는 STI에 대해 생각하고 있습니다. – JohnMerlino