From 4fcb82f2e67eb6373cc3bae50e01f1aa7e4bcf10 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 15 Nov 2018 10:28:20 -0600 Subject: [PATCH] Fix #3991: Loading post #1604318 is broken. Fix exception in Pool#previous_post_id when the post id is not contained in the pool. This can happen when a post's pool_string lists the post as being in a certain pool, but the post is not included in the pool's post_ids. Such pool_string / post_ids inconsistencies exist because of past bugs. --- app/models/pool.rb | 12 +++++++++--- .../posts/partials/show/_pool_list_item.html.erb | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/models/pool.rb b/app/models/pool.rb index 115088842..012eb6469 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -268,19 +268,25 @@ class Pool < ApplicationRecord end def first_post?(post_id) - page_number(post_id) == 1 + post_id == post_ids.first + end + + def last_post?(post_id) + post_id == post_ids.last end # XXX finds wrong post when the pool contains multiple copies of the same post (#2042). def previous_post_id(post_id) + return nil if first_post?(post_id) || !contains?(post_id) + n = post_ids.index(post_id) - 1 - return nil if n < 0 post_ids[n] end def next_post_id(post_id) + return nil if last_post?(post_id) || !contains?(post_id) + n = post_ids.index(post_id) + 1 - return nil if n >= post_ids.size post_ids[n] end diff --git a/app/views/posts/partials/show/_pool_list_item.html.erb b/app/views/posts/partials/show/_pool_list_item.html.erb index 63d0723a3..621a7e3e8 100644 --- a/app/views/posts/partials/show/_pool_list_item.html.erb +++ b/app/views/posts/partials/show/_pool_list_item.html.erb @@ -1,5 +1,5 @@ <%= content_tag :li, id: "nav-link-for-pool-#{pool.id}", class: "pool-category-#{pool.category} pool-selected-#{selected}" do -%> - <% if !pool.first_post?(post.id) -%> + <% if !pool.first_post?(post.id) && pool.post_ids.first -%> <%= link_to("«".html_safe, post_path(pool.post_ids.first, pool_id: pool.id), class: "first", title: "to page 1") %> <% else -%> « @@ -25,7 +25,7 @@ <% end -%> <% end -%> - <% if post.id != pool.post_ids.last -%> + <% if !pool.last_post?(post.id) && pool.post_ids.last -%> <%= link_to("»".html_safe, post_path(pool.post_ids.last, pool_id: pool.id), class: "last", title: "to page #{pool.post_count}") -%> <% else -%> »