これはおそらく簡単ですが、用語がわかりません...
私が作成している Web サイトに、ビデオを表示するユーザー モデルがあります。
ユーザーは動画を「視聴済み」としてマークできます。デフォルトの状態は false です。
ユーザー A がビデオを「視聴済み」としてマークした場合 (値を「true」にする)、ユーザー B がビデオを見ると false として表示されるようにしたいと考えています。
IE の各ビデオは、すべてのユーザーにとって「固有」です。
ありがとうございました!
これはおそらく簡単ですが、用語がわかりません...
私が作成している Web サイトに、ビデオを表示するユーザー モデルがあります。
ユーザーは動画を「視聴済み」としてマークできます。デフォルトの状態は false です。
ユーザー A がビデオを「視聴済み」としてマークした場合 (値を「true」にする)、ユーザー B がビデオを見ると false として表示されるようにしたいと考えています。
IE の各ビデオは、すべてのユーザーにとって「固有」です。
ありがとうございました!
誰がどのビデオを個別に視聴したかを保存できるように、別のモデルを作成する必要があります。
たとえば、すでに と を作成User
していVideo
ます。特定のユーザーが視聴したビデオを保存する別のモデルを作成する必要があります。例として、 という名前を付けますWatchedVideo
。user_id
属性としてとを持ちvideo_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) がビデオを視聴したことになります。
また、ユーザーが複数回視聴済みとしてマークできないように、独自の検証を行う必要があります。
class User < ActiveRecord::Base
belongs_to :user
belongs_to :video
validates :video_id, uniqueness: { scope: :user_id }
end
参照: