2014-12-29 9 views
0

그래서 사용자 모델에 have_many Skills가 필요합니다. 나는 스킬에 대해 두 가지 카테고리, 즉 원하는 스킬과 소유 스킬을 원한다.동일한 모델의 두 가지 유형을 분리하기위한 데이터베이스 구성

예를 들어, 사용자는 자신의 프로필 (예 : HTML)에 스킬을 추가 할 수 있습니다. 또한 Ruby on Rails와 같은 학습하고자하는 프로파일에 기술을 추가 할 수 있습니다. 그들의 프로필에는 현재의 기술과 원하는 기술이 따로 표시됩니다.

높은 수준에서 이것을 설계하는 가장 좋은 방법은 무엇입니까? 나는 거기에 중복이없는 1 개의 스킬 모델을 원하지만, 사용자가 데이터베이스에서 2 가지 스킬 그룹을 가질 수있는 방법을 원합니다. 루비 레일에 당신이, 당신은 단지 필요로 같은 모델 (다른 이름으로) 많은 참조를 가질 수 wanted_skillpossessed_skill

그래서 :

답변

1

당신은 하나의 테이블 상속을 사용할 수 있습니다

class Skill < ActiveRecord::Base 
end 

class WantedSkill < Skill 
    belongs_to :user 
end 

class PossessesSkill < Skill 
    belongs_to :user 
end 

스킬 테이블에 type이라는 열이 있어야 스킬 유형이 저장됩니다.

WantedSkill.create(:name => "html") 

이상은 'WantedSkill'유형의 스킬 테이블에 레코드를 저장합니다. wanted_skill, class_name에 : '스킬' 당신은 당신은 here

1

이를 달성하기위한 방법으로, 두 기술 필드처럼 필요 예를 들어, 어떤 클래스 참조에 class_name를 사용하여 해당 선언합니다 :

class User < ActiveRecord::Base 
    belongs_to :wanted_skill, class_name: 'Skill' 
    belongs_to :possessed_skill, class_name: 'Skill' 
end 
+0

내가 has_many하고 싶어하지 않을까요 문서를 읽을 수 있습니다

class User < ActiveRecord::Base has_many :wanted_skills has_many :possessed_skills end 

같은 사용자 단체가 될 수

WantedSkill.where(:name => "html").first 

하여 검색 할 수 있습니다 belongs_to 대신에? – parameter

+0

예, 그렇지만'belongs_to'는 코드에 더 의미가 있습니다. 하나의 스킬 만 각 필드에 연결될 수 있습니다. 둘 이상이 필요하면 [다 대다 관계] (http : // api .rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html) –

+0

예. 사용자가 원하는 많은 기술을 보유하기를 바랍니다. – parameter