I would like to sort my list in a descending order by date which as a "New user list", in the database I have a column which is
t.datetime "created_at", null: false
This is the time when a new user registered, in the view, I have the code like this:
%table.table.table-striped.table-hover
%thead
%h3 New Users
%hr
%th Name
%th Company
%th Role
%th Created date
%th{:width => '50'}
%th{:width => '50'}
%th{:width => '50'}
%tbody
- @users.each do |user|
-if user.role == "trial-member"
- @created_at.sort{|a,b| b.created_at <=> a.created_at}.each do |created_at|
%tr
%td
= user.first_name
= user.last_name
%td= user.company
%td= user.role
%td= user.created_at
%td= link_to 'Approve', edit_user_path(user), {:class => 'btn btn-success btn-sm'}
but this gives an error that "undefined method `sort' for nil:NilClass", what shall I do to sort the list in table descending by created date? Thank you.
In your controller:
@users = User.order('created_at DESC')
Just add: order('created_at DESC')
in your logic where you're fetching @users
.
In your view, you can now get rid off of - @created_at.sort{|a,b| b.created_at <=> a.created_at}.each
:
%h3 New Users
%table.table.table-striped.table-hover
%thead
%tr
%th Name
%th Company
%th Role
%th Created date
%th{:width => '50'}
%th{:width => '50'}
%th{:width => '50'}
%tbody
- @users.each do |user|
-if user.role == "trial-member"
%tr
%td
= user.first_name
= user.last_name
%td= user.company
%td= user.role
%td= user.created_at
%td= link_to 'Approve', edit_user_path(user), {:class => 'btn btn-success btn-sm'}
Error you are seeing is because @created_at
is not an enumerable object, hence it does not respond to sort
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With