-1

これはおそらく簡単ですが、用語がわかりません...

私が作成している Web サイトに、ビデオを表示するユーザー モデルがあります。

ユーザーは動画を「視聴済み」としてマークできます。デフォルトの状態は false です。

ユーザー A がビデオを「視聴済み」としてマークした場合 (値を「true」にする)、ユーザー B がビデオを見ると false として表示されるようにしたいと考えています。

IE の各ビデオは、すべてのユーザーにとって「固有」です。

ありがとうございました!

4

1 に答える 1

1

誰がどのビデオを個別に視聴したかを保存できるように、別のモデルを作成する必要があります。

たとえば、すでに と を作成UserしていVideoます。特定のユーザーが視聴したビデオを保存する別のモデルを作成する必要があります。例として、 という名前を付けますWatchedVideouser_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

参照:

于 2013-06-13T23:49:33.797 に答える