2012-01-24 2 views
0

이 글은 약간 혼란스럽고 정당하지 않을 수도 있지만 입력에 관계없이 입력하겠습니다.Rails 3 사용자 활동 내역 데이터

나는 미디어 파일을 볼 수있는 사용자에게 레일 3.1.3 응용 프로그램이 있습니다. 나는 그들의 미디어 시청과 관련하여 그들의 활동의 역사를 지키고 싶다. 목표는 내가 사용자 또는 미디어에서 추적 할 수 있도록 기록을 기록하는 것입니다. user.history() 및 media.history()에 대한 데이터를 가져와 사용자가 액세스 한 모든 미디어와 특정 미디어에 액세스 한 모든 사용자 및 각 트랜잭션과 관련된 다른 데이터를 모두 표시합니다.

지금까지 나는이 같은 종류의,이 각 트랜잭션에 대해 하나의 역사의 객체를 생성하는 것입니다 합리적으로 만족을 마련 할 수 있었던 유일한 방법은 :

class history_item 
    belongs_to: media_object 
    belongs_to: user 
    (other transaction-specific data) 
end 

은 무엇 이것에 대해 내가 우려하는 것은 이 응용 프로그램의 일반적인 사용으로 데이터베이스 항목 수가 급격히 증가 할 것입니다. 생각하지 못한이 문제에 접근하는 더 좋은 방법이 있습니까? 레일스와 대규모 웹 애플리케이션 개발에 익숙하지 않은 나는 이런 종류의 일이 정상적으로 이루어 졌는지에 대해 완전히 확신하지 못한다.

답변

0

UserMediaObject 사이의 HABTM 모델로 Viewing 클래스와 같은 모델을 만들 것입니다. 이것은 history이라는 관계를 갖는 것보다 실제 구조를 더 분명하게 만듭니다. 물론 정확한 인터페이스를 원하면 User#historyMediaObject#history에 대한 메소드를 추가 할 수 있습니다. 이러한 개체를 쿼리 할 때 당신은 당신이 사용자의 viewed_media_objects 작업, 당신은에 관련 viewings 및 미디어 객체를 가져 확인 레일을 만들기 위해 @user = User.include(:viewed_media_objects).find(params[:id])를 사용할 수있는 반복 할 것인지 알고 있다면

class User 
    has_many :viewings 
    has_many :viewed_media_objects, :through => :viewings 
end 

class MediaObject 
    has_many :viewings 
    has_many :viewers, :through => :viewings 
end 

class Viewing 
    belongs_to :user 
    belongs_to :media_object 
end 

는, 예를 들어, user = User.first을 부여 사용자와 같은 시간. 이 방법을 사용하면 전체 데이터베이스 호출을 얻을 수 없습니다.