gpt4 book ai didi

ruby-on-rails - rails 和雷 : Pagination showing duplicate results

转载 作者:行者123 更新时间:2023-12-02 00:55:35 26 4
gpt4 key购买 nike

我有一个使用 Kaminari 进行分页的 Rails 应用程序。出于某种原因,在某些页面上,上一页的某些最后结果会转移到下一页的第一个结果。

这是我的 Controller :

 def available
trailers = Trailer.most_recent.released.order("movies.imdb_rating desc").where("movies.imdb_rating IS NOT NULL")
@trailers = trailers.page(params[:page]).per(18)
end

Trailer 模型中的作用域:

 scope :most_recent, -> {
where('NOT EXISTS(SELECT 1 FROM trailers b2 WHERE b2.movie_id = trailers.movie_id AND trailers.is_short_trailer = FALSE AND
b2.is_short_trailer = FALSE
AND (b2.published_at > trailers.published_at OR b2.published_at = trailers.published_at AND b2.id < trailers.id))').
where(show: true).
where(is_short_trailer: false)
}

# gets all trailers that have at least one release
scope :released, -> {
joins(movie: :releases).where("movies.release_date > ?", 25.years.ago)
}

和 View :

<div class="trailers-container">
<%= render @trailers %>
</div>


<div class="pagination">
<%= link_to_next_page(@trailers, 'Next') %>
</div>

所以当我点击“下一步”页面时,有时它很好,但有时我会看到重复的预告片(实际重复,我检查了 ID)。

我做错了什么?

最佳答案

假设 movies.imdb_rating 是一个整数,那么这个排序子句可能会以不同的顺序返回结果:order("movies.imdb_rating desc")

想象一下,如果所有电影的评分都恰好为 8。电影可以按任何顺序返回并且是正确的。

您需要添加另一个字段作为排序依据。也许是标题(先是评级,然后是标题)或发行年份,甚至只是 id。例如:order("movies.imdb_rating desc, movies.title")

关于ruby-on-rails - rails 和雷 : Pagination showing duplicate results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com