Nunca use o último ActiveRecord

Desempenho – Seu argumento é inválido

Quando não há uma razão para preferir um sobre o outro :first, geralmente será mais rápido do que :last, porque a última invoca um implícito ORDER.
Concedido em uma tabela com apenas dezenas de milhares de linhas, não é grande coisa, na ordem de décimos de milissegundos (depois de aquecer meu banco de dados com dezenas de iterações):

[26] pry(main)> User.first.id
User Load (1.4ms) SELECT "users".* FROM "users" LIMIT 1
=> 35811
[27] pry(main)> User.last.id
User Load (1.6ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
=> 36792

Mas nada disso importa , porque nada pode justificar …

Como explodir em 5 etapas

  • Crie um escopo:
class Lead < ActiveRecord::Base
scope
:referred_to_pool, -> {
where("leads.state in (?)", ["cold_pool","hot_pool"]) }
end
  • Crie um recurso que dependa do escopo e use last:
class ReferredLeadsController < ApplicationController
def next_to_assign
@lead = Lead.referred_to_pool.last
end
  • Decida que deseja lidar com as atribuições em uma ordem priorizada, então atualize o escopo
scope :referred_to_pool, -> { 
where("leads.state in (?)", ["cold_pool","hot_pool"]).
order
("referred_at DESC NULLS LAST") }
  • Teste se o escopo funciona e pode até ser usado com first
Lead.referred_to_pool.order("assigned_at DESC NULLS LAST").first
Lead Load (91.1ms) SELECT "leads".* FROM "leads" WHERE (leads.state in ('cold_pool','hot_pool')) ORDER BY referred_at DESC NULLS LAST LIMIT 1
=> #<Lead id:...
  • Mas você usou last, então, em vez disso, observe seu app explodir:
  Lead Load (0.8ms)  SELECT "leads".* FROM "leads"  WHERE (leads.state in ('cold_pool','hot_pool')) ORDER BY referred_at DESC NULLS LAST DESC LIMIT 1
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "DESC"
LINE
1: ...utfitter_id) ORDER BY referred_at DESC NULLS LAST DESC LIMIT...
^
: SELECT "leads".* FROM "leads" WHERE (leads.state in ('cold_pool','hot_pool')) ORDER BY referred_at DESC NULLS LAST DESC LIMIT 1
from .../activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:1163:in `async_exec'