这可能很容易,但我不知道它的用语...
我在创建的网站上有一个用户模型,可以显示视频。
用户可以将视频标记为“已观看”。它的默认状态为false。
我想这样做,如果用户A将视频标记为“已观看”(使值为“真”),那么当用户B查看视频时,它会显示为false。
即。每个视频对每个用户都是“唯一的”。
谢谢!
答案 0 :(得分:1)
您应该创建另一个模型,以便存储谁分别观看了哪个视频。
例如,您已经创建了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)已经观看了该视频。
您还需要进行唯一验证,以便用户无法标记超过1次。
class User < ActiveRecord::Base
belongs_to :user
belongs_to :video
validates :video_id, uniqueness: { scope: :user_id }
end
参考: