2010-03-29 1 views
0

와 레일에 여러 관계를 만들기 내가 뭘하려고 종류의 같은 수 있습니다 :이 같은 데이터 유형

나는 데이터 유형 "사용자"를 예를 들어 "기사"를 가지고있다. 나는이 두 가지 사이의 관계를 원하지만 하나 이상의 방식으로 관계를 원합니다.

예를 들어 사용자가 기사를 '좋아요'또는 '즐겨 찾기'하도록 허용하고 싶습니다. 그래서 데이터베이스에 두 개의 관계가 있어야합니다. 하나는 기사를 좋아하는 사용자를위한 것이고 다른 하나는 사용자가 북 마킹하는 것입니다. 그래서 "user_article"테이블을 작성하는 것만으로는 충분하지 않을 것입니다. 맞습니까?

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

설명하는 것은 "데이터 모델"이 아니라 "데이터 유형"입니다. 데이터 유형 = 문자열, 정수 등. 활성 레코드 객체 인 경우 데이터 모델 또는 활성 레코드 모델입니다.

Eimantas는 자신의 게시물에 "have_many"가 아닌 "has_many"관계가 2 가지라고 설명했습니다. 이 예제에서 북마크를 조인 모델이라고합니다. 조인 모델에 다른 것들을 배치하고 관계를 사용하여 사물을 완성 할 수 있다는 것을 기억하십시오. 북마크 순서 또는 좋아하는 순위를 원한다고 가정 해 봅시다. 조인 모델이 이에 대한 아이디어입니다.

아래로 벗겨진 예 :

class Article < ActiveRecord::Base 
    has_many :users, :through => :user_bookmarks 
end 

class UserBookmark < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :article 
end 

class User < ActiveRecord::Base 
    has_many :user_bookmarks 
    has_many :articles, :through => :user_bookmarks 
end 

것들 기초를 다운 받고 이후 보는 : 카운터 캐시 - 당신은 그들이 당신의 친구입니다 수를하고 있다면.

지금 바로 다형성에 뛰어 들기보다는이 두 조인 모델을 사용하는 것이 더 쉽고 빠릅니다. 당신이 그것을 얻은 후에 당신은 그 다음을 탐험 할 수 있습니다.

0

bookmarking_type의 모델 (type은 RoR 용으로 예약 됨)을 가지고 있다고 Bookmarking 모델이 제안합니다. 그러면 has_many :bookmarkingshas_many :liked_articles, :through => :bookmarkingshas_many :bookmarks, :through => :bookmarkings 수 있습니다. 물론 조건을 추가하거나 이러한 결합에 SQL을 조인해야하지만 모두 좋다. 나는 거기에 대한 플러그인조차 있다고 믿는다. 단지 atm이라는 이름을 기억할 수 없다.

+1

좋아요, 그래서 관계에 대해서만 사용되는 새로운 데이터 유형을 만들 수 있습니까? 나는 총을 쏠거야! – Lowgain

+0

이것은 "has_many"가 아니며 "have_many"가 아닙니다 – Nick

+0

감사합니다, Nick, fixed! 나는 문장의 흐름을 시도했지만.) – Eimantas