2013-06-13 3 views
-1

이것은 아마도 쉽지만 그 말을 모르겠습니다 ...각 사용자마다 고유 한 모델을 만드시겠습니까?

나는 비디오를 표시하는 웹 사이트에 사용자 모델을 가지고 있습니다.

사용자는 비디오를 "감시 됨"으로 표시 할 수 있습니다. 기본 상태는 false입니다.

나는 사용자 A가 (값을 "감시"로 비디오 표시 그렇다면 그것을 만들고 싶어 "사용자 B가 비디오에서 보이는 때 거짓을 보여줍니다 사실을).

IE 각 비디오는" 모든 사용자에 대해 "고유 한.

감사합니다!

답변

1

당신은 예를 들어 어떤 비디오 개별적으로.

, 이미 UserVideo을 만든 지켜했다 누가 저장할 수 있도록 다른 모델을 만들어야합니다. 특정 사용자가 시청 한 비디오를 저장할 다른 모델을 만들어야합니다. 예를 들어, 이름을 WatchedVideo으로 지정합니다. 속성으로는 user_idvideo_id이 있습니다.

모델을 업데이트하여 has_many through 연결을 설정하십시오.

class User < ActiveRecord::Base 
    has_many :videos, through: :watched_videos 
end 

class Video < ActiveRecord::Base 
    has_many :users, through: :watched_videos 
end 

class WatchedVideo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :video 
end 

따라서, 사용자가 비디오를 시청 한 다음, 그냥 WatchedVideo에 레코드를 추가. 예 :

# Create the viewing record 
# Create a controller and define an action that will do something like this 
# POST using AJAX or whatever method suitable for you 
w = User.find(1).watched_videos.build 
# w = current_user.watched_videos.build 
w.video_id = params[:video_id] 
w.save 

# Check if the user has watched the video 
# so that you can set wheter the User A/B has viewed it or not 
WatchedVideo.where(user_id: 1, video_id: 2) 
User.find(1).watched_videos.where(2) 

따라서 이러한 명령 중 하나라도 nil을 반환하지 않으면 특정 사용자 (id = 1)가 동영상을 보았습니다.

사용자가 1 회 이상 시청할 수 없도록 고유 한 유효성 검사를 수행해야합니다.

class User < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :video 

    validates :video_id, uniqueness: { scope: :user_id } 
end 

참조 :

+0

코드의 첫 번째 블록에 오타가있다. (두 사용자 클래스) –

+0

롤 감사합니다, 이전 코드를 붙여 넣은 후 다시 편집하는 것을 잊었습니다 – amree

+0

정말 고마워요! WatchedVideo 항목을 추가하려면 어떻게해야합니까? User1이 video1에서 '시청 됨'을 확인했다고 가정 해 보겠습니다. 어떻게 이것을 DB에 넣을 수 있습니까? 감사!! –

관련 문제