2011-03-06 3 views
1

다음과 같은 관계를 표현하는 가장 좋은 방법을 찾으려고합니다.레일 연관 -이 관계를 어떻게 표현 하시겠습니까?

Newspaper has_many Articles 
Newspaper has_many Subscribers 

구독자는 개인 페이지의 기사를 저장할 수 있습니다.

두 가지 질문 :

1) 관계가 레일과 어떻게 비슷합니까? 'save'액션은 어떻게 생겼습니까? 은 has_many을 사용하여 나에게 잘 보이지 않는다 다음

:

class ArticleController < ApplicationController 
    def save 
    a = Article.find(101) 
    @user.saved_articles << a 
    end 
end 

2)는이처럼 보였다 테이블 Saved_Articles에 가입해야합니까?

Saved_Articles 
---------------- 
user_id, article_id 

답변

3

설명하는 것은 다 대다 관계입니다. 레일 협회의 관점에서,이 그것을 정의하는 방법 중 하나입니다 :

class Newspaper 
    has_many :articles 
    has_many :subscribers 
end 

class Subscriber 
    belongs_to :newspaper 
    has_and_belongs_to_many :articles 
end 

class Article 
    belongs_to :newspaper 
    has_and_belongs_to_many :subscribers 
end 

has_and_belongs_to_many을 사용하면 조인 테이블이 필요합니다,하지만 articles_subscribers 호출 할 필요가 및 subscriber_idarticle_id 필드있을 것입니다 :

articles_subscribers 
-------------------- 
article_id 
subscriber_id 

다음 @user을 가정하고, 다음과 같이 보일 것입니다 귀하의 save 행동이었다 Subscriber의 인스턴스 :

class ArticlesController < ApplicationController 
    def save 
    @user.articles << Article.find(params[:id]) 

    # handle the response - render or redirect 
    end 
end 

has_and_belongs_to_many

+0

이와 같은 자세한 답변을 부탁드립니다. – truthSeekr

1

질문 # 2에 대한 답변 : 이 경우 조인 테이블이 필요하지 않습니다. 3 개의 별도 테이블 (신문, 기사 및 가입자)만으로도 충분합니다. newspaper_id의 외래 키는 기사 및 가입자에 포함됩니다.

관련 문제