2012-06-15 18 views
7

Al tratar de buscar con id de clasificación (y paginar) im conseguir desde el registro (y la versión?):Ruby on Rails fin por id

SELECT `audits`.* FROM `audits` ORDER BY version, id DESC LIMIT 50 OFFSET 0 

actualmente estoy usando este código:

@records = Audit.order("id DESC").page(page).per(50) 

El problema es que la lista recuperada no está correctamente ordenada por id descendente.

BTW estoy usando audited-activerecord gem para auditorías, ¿esto importa?

+1

Parece que esta joya escribe internamente un ordenamiento default_scope por la versión en sus modelos. Intente buscar en la documentación de gem si puede desactivar este default_scope para algunos modelos. – MurifoX

Respuesta

12

supongo que su joya es la creación de un ámbito predeterminado en el modelo de auditoría que las órdenes de versión, por lo en este momento está ordenando en orden ascendente por la columna de versión, y, solo si dos registros son iguales, está ordenando por id en orden descendente.

Para solucionar este problema, puede anteponer unscoped a su cadena:

Audit.unscoped.order("id DESC").page(page).per(50) 
7

intento:

@records = Audit.except('order').order("id DESC").page(page).per(50) 

la except('order') debe quitar cualquier relaciones de orden añaden a la consulta

+1

Interesante, nunca supo sobre 'excepto' antes. –