Combinando búsqueda simple, will_paginate y ordenamiento

Hola, estoy combinando una función de búsqueda simple con la paginación will_paginate, basada en los respectivos y excelentes tutoriales de RailsCasts.

El código (en el modelo) se muestra a continuación,

def search(search, page)

  # See RailsCasts #37 Simple Search Form & #51 will_paginate

  if search
    @matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                      "%#{search}%", "%#{search}%")

    @matches.paginate :per_page => 30,
                      :page => page,
                      :order => 'created_at DESC' # <--- causes exception
  else
    paginate :include => [:salesperson, :product],
             :order => 'created_at DESC',  # works 
             :per_page => 30,
             :page => page
  end
end

El pedido especificado funciona bien en la solicitud de paginación en la ruta sin la búsqueda.

Sin embargo, en la ruta que usa el resultado de búsqueda (@matches), aparece el siguiente error:

SQLite3::SQLException: ambiguous column name: created_at: SELECT ...  ORDER BY created_at DESC LIMIT 30 OFFSET 

Si elimino el parámetro de orden, funciona bien.

Agradecería sugerencias sobre cómo solucionar esto. Gracias.

preguntado el 03 de mayo de 12 a las 15:05

3 Respuestas

Ambos moldes de rieles son bastante antiguos. Miraría la fuente para asegurarme de que no hubo cambios importantes entre los rieles 2 y 3 para ellos.

También verifique que genere created_at como parte de su migración.

contestado el 03 de mayo de 12 a las 17:05

La solución aquí fue agregar 'todos' al final de la solicitud 'dónde', para iniciar la consulta real para cargar los datos, según el protocolo Active Record Query.

@matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                  "%#{search}%", "%#{search}%").all

contestado el 28 de mayo de 12 a las 11:05

@matches.paginate(:per_page => 30,:page => page).order('created_at DESC')

respondido 10 mar '16, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.