2013-02-07 1 views
0
내가 고안 내가 다형성 관계를 원하는 사용하고

, 나는이 내 코드레일 고안 다형성

모델 >> 사용자 표 사용자의 usersable_type '와'usersable_id '

에 열을 추가

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    # attr_accessible :title, :body 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    #usarsable 
    belongs_to :usersable, :polymorphic => true, :autosave => true, :dependent => :destroy 
    accepts_nested_attributes_for :usersable 

end 

모델 >>

class Medic < ActiveRecord::Base 
    attr_accessible :license_number, :specialty 

    has_one :user, as: :usersable, dependent: :destroy 
    has_and_belongs_to_many :patients 
end 
메딕

모델 >> 환자

class Patient < ActiveRecord::Base 
    belongs_to :socialsecurity 
    attr_accessible :birthday, :blood_type 
    has_one :user, as: :usersable, dependent: :destroy 
    has_many :contacts 
    has_and_belongs_to_many :medics 
end 

재정 고안 컨트롤러

class RegistrationsController < Devise::RegistrationsController 
    def new 
    super 
    @user.build_usersable # I had problem in this line 
    end 

    def create 
    end 

    def update 
    super 
    end 
end 

사람들은 내가 순간이 모든 모델입니다,하지만 난 아직도 내가 해달라고, 같은 문제가 다형성 객체를 생성하고 저장하는 방법을 알고 있어야합니다.

오류는 여전히 같은

ERROR: undefined method `build_usersable' for "<#User:"

사람이 내가 미리

줄리에 감사

감사 및 감사 것이 나에게 도움이 될 수 있습니다.

+0

나는 당신이 필요한 것을 아주 이해하지 못합니다. 위생병을 사용자에게 속시겠습니까? 사용자는 무엇에 속해 있습니까? 나는 당신이 이후에 있다고 생각하는 것은 당신이 속하는 사용자가 하나 이상의 모델을 가지고 있다는 것입니다. 그렇다면 당신은 다형성을 필요로하지 않습니다. –

+0

물론 환자와 관리자 같은 다른 모델도 있습니다. 예를 들어 위생병 만 넣습니다. 지연과 매우 유감스럽게 생각해서 죄송합니다 !! – Julieta

+0

나는 여전히 왜 polyorphc 관계가 필요한지 모르겠다. 왜 Medic에서 user_id를 소유하고 belongs_to 사용자를 사용하지 않습니까? 단일 사용자가 많은 사용자 연결을 가질 수 있습니까? 그렇다면 조인 테이블이 필요합니다. 위생병과 같은 다른 모델의 예를 들어 자세한 내용을 제공해 주시면 구현 사례를 제시해 드리겠습니다. –

답변

0

의견의 대화를 토대로하면 이것이 필요한 체계라고 생각합니다.

나는 사용자가 많은 양상을 가질 수있는 양상의 개념을 사용할 예정이며, 양상은 의료진, 내용 세부 사항 등일 수있다. Aspect는 단 한 명의 사용자 만 가질 수 있습니다.

먼저 당신은 USER_ID이있는 UserAspect 모델과 aspect_type을 필요로하고 지금

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    # attr_accessible :title, :body 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    #aspects 
    has_many :user_aspects 
    has_many :aspects, :through => :user_aspects 

end 

그리고 당신의 의료진

class Medic < ActiveRecord::Base 
    attr_accessible :license_number, :specialty 

    has_one :user_aspect, as: :aspect, dependent: :destroy 
    has_one :user, :through => :user_aspect 
end 

지금 주문

class UserAspect < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :aspect, :polymorphic => true 
end 

사용자 모델을 aspect_id 당신

처럼 할 수 있습니다.
user.aspects 

medic.user 

etc 
+0

처음으로 많은 감사를드립니다! 하지만 왜 모델을 더 많이 사용하는지 이해하지 못합니다. 단순한 테이블에서 아이디어를 보여 드리겠습니다. 아마도 이해할 수있을 것입니다. ** 모델 단순화 ** ** 테이블 사용자 ** (ID, 사용자 이름, 비밀번호, 사용자 가능 유형, 사용자 가능 ID) ** TABLE MEDICS ** (ID, 라이센스 번호, 전문 분야) ** TABLE PACIENTS ** (ID, blood_type, 생일) 및 ** user.usersable **을 사용할 수 있습니다. 여기서 usersable은 Medic이나 Patient가 될 수 있습니다. ** 완료 할 수 있다는 것을 알고 있지만 ** 고마워요 ** ** 많이 고마워요 !! ** – Julieta

+0

안녕하세요, 귀하의 이전 의견에 의사가 많은 환자를 가질 수 있다고 말했고 의사는 사용자입니다 . 사용자 테이블의 usersable_type, usersable_id에 단일 사용자가 어떻게 많은 환자를 가질 수 있습니까? 또는 의사가 다른 테이블입니까? –

+0

도와 주셔서 대단히 감사합니다 !! 그렇습니다 ** Medic ** 테이블이 있으며 다른 테이블 ** medics_patients **가 있습니다. 하나의 환자는 많은 Medic을 가질 수 있고 Medic은 많은 환자를 가질 수 있기 때문입니다. ** 고마워요 !! ** – Julieta