2011-08-07 1 views
1

현재 레일즈 앱에는 Post, UserMovie의 3 가지 모델이 있습니다. 나는 사용자가 동영상에 대한 게시물을 작성할 수 있도록하려면 지금레일 : 모델 설계 및 다른 사람들과 올바르게 연결하기위한 도움말

Post: id: integer, user_id: integer, location_id: integer, description: string

Movie: id: integer, name: string, rating: decimal, ...

User: id: integer, email: string, encrypted_password: string ...

아래 모델에서 중요한 필드를 나열했습니다, 그리고 내 사이트 다음을 표시합니다 게시물. 영화에 대한 기존 게시물이있는 경우 사용자가 영화에 할당 한 rating은 기존 등급으로 추가 및 평균되어야하며 사용자가 할당 한 description은 이미 설명 목록에 추가되어야합니다 영화에 있습니다.

첫 번째 질문 : Movie 모델의 일부로 설명 목록을 영구 저장하려면 어떻게합니까? 예를 들어 Movie 모델의 일부로 문자열 배열을 저장할 수 있습니까? 아니면이 목적으로 새로운 Description 모델을 만들어야합니까?

그런 다음이 모델을 연결하여 예상대로 작동하도록하려면 어떻게해야합니까?

Post -> belongs_to -> User, User -> has_many -> Posts, Post -> has_one -> Movie하지만이 그들을 연결하는 올바른 방법입니다 확실하지 않다, 나는 :through 협회와 경험이없는

답변

1

: 내 생각은했다 (여기서해야 할 수도?) 올바른 연결은 다음과 같습니다.

게시물 테이블에 movie_id 열을 추가해야합니다. 설명은 영화 모델이 아닌 사후 모델에 있어야합니다. 특정 영화에 대한 게시물을 표시하려면 @ movie.posts가 있어야합니다.

+0

평균 등급을 유지하려면 rating_count를 유지하여 해당 영화를 평가 한 사용자 수를 추적해야합니다. rating = 0 및 rating_count = 0으로 시작하십시오. 사용자가 영화를 평가하면 새 등급 = (이전 등급 + 새 등급)/(rating_count + 1)입니다. 그리고 rating_count를 1 씩 증가시킵니다. –