Sorting group_by

I have ran into a stumbling block sorting a group_by

In my model, I have defined a method called “due_by_in_words”, this
method returns a hash with a :key and a :value based on a number of
elsif statements.

{:key => 1, :value => ‘Overdue’}
{:key => 2, :value => ‘Today’}
etc…

In my controller I have:

@tickets_due_by = @tickets.group_by { |t| t.due_by_in_words[:key] }

Which is grouping based on the hashes :key, this is working very well.

What I want to do now, is to display the :value from the hash, in my
view I have:

<% @tickets_due_by.sort.each do |due_by_in_words, tickets| %>

<%= due_by_in_words %>

<% for ticket in tickets %> HTML here... <% end %> <% end %>

This is, of course, only displaying the :key (1,2,3…), I would like
to be able to access the :value of the hash, but it won’t be
accessible to the view, at least I don’t think it will be. It seems
to me that the “due_by_in_words” will only contain the :key of the
hash, and not the entire hash.

I want to be able to display the :value as a header of sorts

Any thoughts?

Alright. Couple things.

Tickets should have an attribute :due_by that stores when it’s due.

due_by should return a hash of due ids and descriptions. Keep in mind,
when writing hashes, you don’t explicitly define :key and :value:
@due_by = {1 => ‘Overdue’, 2 => ‘Today’,…}

In your controller you should have:
@tickets_due_by = @tickets.group_by{|t| t.due_by}

Then in your view
<% @tickets_due_by.sort.each do |due_by_id, tickets| %>

<%= @due_by[due_by_id] %>

<% for ticket in tickets %> <%= ticket.name %> <% end %> <% end %>

Basically it involves writing your hash correctly :slight_smile:

ESPNDev