2012-06-19 3 views
0

기본적으로 Netflix의 DVD 대여 모델과 비슷한 관계를 설정하고 싶습니다.이 복잡한 활성 레코드 관계는 어떻게 설정합니까?

사용자가 있고 각 사용자마다 대기열이 있으며 각 대기열에는 많은 DVD가 있고 DVD에는 많은 대기열이있을 수 있습니다. 대기열은 사용자에게 속합니다.

활성 레코드에서이를 설정하는 방법을 잘 모르겠습니다. 아마 대기열과 사용자가 has_many : 관계를 통해 있어야한다고 생각했지만별로 의미가 없습니다.

도움을 주시면 감사하겠습니다.

답변

1
class User < ActiveRecord::Base 
    has_many :queues 
end 

class Queue < ActiveRecord::Base 
    belongs_to :user 
    has_many :dvd_queues 
    has_many :dvds, through: :dvd_queues 
end 

class Dvd < ActiveRecord::Base 
    has_many :dvd_queues 
    has_many :queues, through: :dvd_queues 
end 

class DvdQueue < ActiveRecord::Base 
    belongs_to :dvd 
    belongs_to :queue 
end 

Queue & Dvd 사이를 has_many 대신 has_and_belongs_to_many의 연결을 사용하는 이점은 이것이 당신이 DvdQueue에, priority처럼 필드를 추가 할 수 있다는 것입니다. 모델 뷰와 컨트롤러를 필요

내가 사용자가 는 일반적으로

당신이 사용자에 대한 해당 컨트롤러가있는 것 자신의 큐에 DVD를 추가하고, 자신의 대기열을 볼 수 있도록하려는 경우, 대기열 및 Dvd는 표준 경로에 매핑 된 CRUD 작업을 제공하며 색인보기, 새로운 & 편집 작업을 제공합니다.

+0

'has_many : ~ dvd_queues'를 사용하려면 어디에서나'has_many : dvd_queues'를 추가해야합니다. 왜 has_and_belongs_to_many를 사용하고 join 모델을 제거하지 않겠습니까? –

+0

감사합니다 ... 어떻게이보기/컨트롤러에 묶어? 어떤 모델은 사용자가 큐에 DVD를 추가하고 대기열을 볼 수있게하려는 경우보기 및 컨트롤러가 필요합니다. –

+0

멋진 답변, 감사합니다! –