2014-02-26 1 views
0

나는 내가하고있는 앱이 내가 만들고있는 앱 (주니어 dev 레벨)에 적합한 지 물어보고 싶다.Polymorphic Association을 사용하여 다른 유형의 사용자를 표시해도 괜찮습니까?

기본적으로 앱에는 의사, 고객 및 관리자가 필요합니다 (현재). 각각은 자신의 프로필 페이지를 가지고 있으며 다른 일을 할 수 있습니다. 또한 가입 절차를위한 User 클래스가 있습니다.

PA 선택에 대한 나의 근거는 모든 사용자가 사용자로 로그인한다는 것이며, "의사가되는 것"과 "사용자가되는 것"을 분리하고 싶습니다. 이것은 좋은 생각입니까?

class User < ActiveRecord::Base 
    rolify 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    belongs_to :profile, polymorphic: true 

end 

class Doctor < ActiveRecord::Base 
    has_one :user, as: :profile, dependent: :destroy 
    accepts_nested_attributes_for :user 

    ## doctor stuff 

    delegate :email, :password, to: :user 
end 

class Client < ActiveRecord::Base 
    has_one :user, as: :profile, dependent: :destroy 
    accepts_nested_attributes_for :user 

    ## client stuff 

    delegate :email, :password, to: :user 
end 

답변

0

내게는 사용자 유형 정보 (의사, 클라이언트 등)를 사람 유형 정보와 구분하는 것이 매우 합리적입니다. 프로필보다는 협회 사람의 이름을 지정하는 것이 좋지만 중요하지는 않습니다. 예, 저는 다형성 협회가 아마도 당신이 원하는 것을 성취 할 것이라고 생각합니다.

+0

감사합니다. @Coenwulf. 저는 이것이 약 80 %가이 길을가는 것이라고 확신하지만, [Enterprise Rails] (http://enterpriserails.chak.org/full-text/chapter-10-multiple-table-inheritance)를 읽을 때 걱정됩니다 데이터베이스 무결성에 대해. 예를 들어 이메일 주소가없는 의사를 만들 수 있습니다. 이는 끔찍한 일입니다. 이게 풀릴 수 있습니까? –

+0

사용자에게 이메일을 저장하는 것으로 보입니다. 사용자 _must_에 전자 메일 주소가 있지만 의사에게 필요하지 않기 때문에 문제가됩니까? 의사가 반드시 사용자가 아니기 때문에 그렇게한다면? 상황에 대한 자세한 내용이나 어떤 유효성 확인을 할 수 있습니까? – Coenwulf

+0

오, 나는 아직 검증을받지 못했다. 내가 검증을 한 다음 문제를 다시 확인해야한다고 생각해. 그래, 모든 의사는 사용자이고 이메일 주소가 필요합니다. –