making ActiveRecord::Base sort by id

Hello,

I’m trying to mix in a module so that AR::Base will sort all record by ID by default.

I’ve worked up a repo with a few methods of doing things similar to this, but I can’t get this working as I want (I started with the rails project from https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres )

There are three non-master branches on that project:

  1. https://github.com/rubyrailhead/ar-default-orderby/compare/ar-concern-order-by
  • is close but doesn’t work. This is close to what I want to get working. Can anyone help me get this branch working?
  1. https://github.com/rubyrailhead/ar-default-orderby/compare/intermediate-subclass-order-by
  • works but introduces an intermediate subclass
  1. https://github.com/rubyrailhead/ar-default-orderby/compare/subclass-order-by
  • puts the ‘order by’ directly in the mode. Works but requires change to each subclass.

Again, can anyone help me to make the changes to get the branch at

https://github.com/rubyrailhead/ar-default-orderby/compare/intermediate-subclass-order-by

Working?

Thanks very much in advance,

Ruby

Can I ask why you would want to do that? You don't have to give a reason of course, just interested.

Colin

I would not recommend using a default scope on an ActiveRecord model for sorting.

Start your Rails console and try Model.find(1). This will result into: SELECT models.* FROM models WHERE models.id=1 ORDER BY id DESC LIMIT 1

This ORDER BY will be included in every unneccessary query. The above query will be slower in MySQL than without the ORDER BY clause. Try it yourself!

Create a normal scope and include it with every query where you expect more than 1 record as a result.

In case you consider a mixin try ActiveSupport::Concern