2010-07-20 5 views
1

질문이나 기사에 태그가 하나 밖에없는 stackoverflow와 같은 응용 프로그램을 개발 중입니다. 하나의 태그에는 하나 이상의 기사가 있어야합니다.RoR에서이 두 테이블의 관계는 무엇입니까?

그래서 저는 RoR에서 이전 작업을하고 있습니다. 나는 어떤 관계가 두 테이블에 모두 적합한 지 생각하고 있습니다. 기사 테이블에서 "has_many"를 사용해야하고 태그 테이블에서 "has_many"를 사용해야합니다.

class Article < ActiveRecord::Base 
    has_many :tags 
end 

class Tag < ActiveRecord::Base 
    has_many :articles 
end 
이 같은

또는 무언가 :

그러나 내가 생각하고

그래서, 첫 번째가 같다 ....이 필요한 경우, 중간에 뭔가를 하나 이상의 테이블을 추가하는 것입니다
class Article < ActiveRecord::Base 
    has_many :articleTagList 
    has_many :tags, :through => : articleTagLists 
end 

class Tag < ActiveRecord::Base 
    has_many :articleTagList 
    has_many :articles, :through => :articleTagLists 
end 

class ArticleTagList < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :tag 
end 
+0

http://github.com/mbleigh/acts-as-taggable-on을 사용 하시겠습니까? – davidcelis

답변

1

정규화 된 데이터베이스의 다 대다 관계에는 항상 세 번째 "조회 테이블"이 필요합니다.

비정규 화하는 경우 한 필드에 태그 ID가 있고 그 사이에 구분 기호가있는 것을 피할 수 있습니다. 그러나 검색을 처리하는 논리도 제공해야합니다.

개인적으로는 정규화 옵션을 사용합니다.

0

당신이 (예를 들어 질문 Y에 태그 X를 추가 한 사용자의 이름을) 중간 테이블에 대한 정보를 저장하지 않으려면, 당신은 has_and_belongs_to_many 사용할 수 있습니다 http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

당신이 만약을 뭔가를 저장하려면 중간 모델을 만들어야합니다. 귀하의 예에서 ArticleTagList 모델은 ArticlesTag이어야하고 데이터베이스 테이블은 관례에 따라 articles_tags 여야합니다.

관련 문제