我们为用户制作视频片段。用户可以按评级/观看/日期过滤视频。 用户也可以决定隐藏已经看过的视频。这是我挣扎的地方。
现在我有一个解决方案,它正在运行,但似乎表现不佳。
if @filter == "newest"
if @unseen
ids = Videothek::Video.where(videothek_category_id: categories).pluck(:id)
views = Videothek::Video::View.where(user_id: current_user.id).pluck(:video_id)
unseen = ids - views #ids der ungesehenen videos
@videos = Videothek::Video.where(id: unseen).order("created_at DESC")
else
@videos = Videothek::Video.where(videothek_category_id: categories).order("created_at DESC")
end
end
我认为必须可以使用范围,例如Videothek::Video.unseen(current_user).order(.....)
Video
has_many Views
,但我很难让连接运行,因为我只想要视频,DONT与videothek_video_view有关联,其中user_id = 1(或current_user.id )。
有人能帮助我吗?
btw:我们在RoR3上
答案 0 :(得分:1)
您可以使用where.not(video_id:[ids])来使用户已经看过数据库过滤视频。从rails 4开始添加此方法。
https://robots.thoughtbot.com/activerecords-wherenot
而不是pluck(:id)你可以使用.ids。我也会将代码移出控制器。
可能你的问题更适合https://codereview.stackexchange.com/,因为你已经有了工作版。