rails_cursor_pagination icon indicating copy to clipboard operation
rails_cursor_pagination copied to clipboard

Support primary keys that aren't named `id`

Open Aesthetikx opened this issue 1 year ago • 3 comments
trafficstars

I understand that when giving a order_by: column other than the default :id, extra care is required to ensure that unique results are accounted for because we cannot ensure that the user specified column is unique, and hence adding :id is required. However, I am thinking that the 'spirit' of this behavior is really not about :id specifically but about if we are sorting by the table's primary key or not. I have a few cases where unfortunately the table's primary key is not called :id, and in fact also does not even have a column named :id, and hence the 'more complex' sorting case is triggered and fails because there is no :id column.

I may or may not take a swing at this change if it seems worthwhile, but at a glance it seems that in Paginator something like order_by ||= :id could be replaced with order_by ||= relation.primary_key.to_sym, and then a few more spots also would have to be updated where we are relying on the behavior that the primary key is :id.

Aesthetikx avatar May 26 '24 00:05 Aesthetikx

Yeah, I have the same issue.

reinaldob avatar Jun 04 '24 19:06 reinaldob

Hello @Aesthetikx. This is an issue that popped up a couple of times already, and not an uncommon use case either. I tried to introduce support for custom primary keys before but hit a roadblock when I had to change the tests, which are unfortunately not very maintainable. Feel free to open a new PR and to take a look at my attempt from last year here but keep in mind that it may require some major refactoring of the tests 🙁 I remember that in the end I discovered it wasn't worth it or needed for my specific use case so I ended up dropping the change but I think it would be a very valuable addition to this gem.

aaronsama avatar Jun 05 '24 06:06 aaronsama

@Aesthetikx maybe you already found, but there is a "fork" that has what we want: https://github.com/healthie/activerecord_cursor_paginate

reinaldob avatar Jun 05 '24 11:06 reinaldob