Мы создаем видео-раздел для наших пользователей. Пользователь может фильтровать видео по рейтингу/просмотров/дате. Также пользователь может решить скрыть уже увиденные видео. Здесь я немного боюсь.Лучший способ фильтрации невидимых видео в Rails
прямо сейчас у меня есть решение, которое работает, но, похоже, отлично работает.
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
, но я изо всех сил, чтобы получить присоединиться к бежать, а я просто хочу видео, что не имею ассоциация с видеотелеком_видео_вью, где user_id = 1 (или current_user.id).
Может ли кто-нибудь помочь мне?
кстати: мы на RoR3
Извините, забыли сказать, что мы находимся на рейках 3. –
, так что бы вы сказали, что это правильный путь, чтобы получить список ВСЕХ просмотренных видеороликов, а затем вывести их из результата? –
, так что я запускаю область действия Videothek :: Video :: View.where (user_id: user.id) .pluck (: video_id) 'и использует в области действия where' where ("id NOT IN (# {seen.join (',')}) ") ', который дает мне тогда '=>" SELECT 'videothek_videos. * FROM'videothek_videos ГДЕ (id NOT IN (1,2,3,4,5,25,26,27) , 29)) "' первый взгляд: рабочий. второй взгляд: SQL может получить huuuuuuuge (после 4.000 просмотров видео?), не проблема для моего mysql? –