When displaying a threaded conversation with messages paginated by Kaminari, I had the unique requirement to display messages in DESC order by their creation date. This meant that if there were 12 messages with 5 per page, the breakdown would be
12 - 87 - 32 - 1To actually display the message number next to each message, it had to be calculated using the methods added to a paginated model by Kaminari (see the :message_number value below)
<div class="comments">
<% @messages.each_with_index do |message, index| %>
<%= render :partial => 'message', :locals => {:message => message, :message_number => @messages.total_count - (@messages.current_page - 1) * @messages.limit_value - index} %>
<% end %>
</div>
For now this is the only place the above calculation is relevant. Should I need it in multiple places I would move the above calculation to a helper.
Recently working with Kaminari, I wanted to have text display next to the pagination links like
283 Items - Page 3/15
I wanted the Items text to be dynamic according to the model the paginated collection was representing. Looking over my model names I found converting each to a human readable version would work great in all cases I needed a paginator. Simply using pluralize (I use singular form for my models) will not work in all cases.
User would become Users - great!Page would become Pages - great!ConversationMessage would become ConversationMessages - yuck!For the ConversationMessage model, I really only wanted to display the items in the collection to the user as Messages, not ConversationMessages or even Conversation Messages. I found this was common for my other models on the many side of a one-to-many relationship too (ie. for my UserComplaint model, I wanted the pagination text to say simply Complaints).
The following works beautifully for all models I currently have in place
@collection.first.class.name.underscore.humanize.pluralize.titleize[/\s?([^\s]+)$/, 1]
With models having their default names (in the plural form), the .pluralize call can be removed.