2010-09-29 29 views
9

estoy tratando de definir dos variables de la siguiente manera:Buscar todos los registros que tienen un campo no nulo?

  1. @orders = Customer.find_all_by_order_date (cero)
  2. @nonorders = Customer.find_all_by_order_date (! Nil)

Los primeros trabajos adecuadamente pero el segundo no. ¿Cómo puedo encontrar aquellos clientes cuyos campos de fecha de pedido no son nulos?


@nonorders = @ customer.orders.find (: todos,: condiciones => "@ customer.orders.order_date no es nulo")

me da el siguiente error:

método indefinido `extract_options_from_args! ' para ActiveRecord :: Base: Clase

He intentado cambiar las condiciones, como @denes.order_date, @ customer.order.order_date, etc. ¿Qué está causando este error? ¡Gracias!

+0

En los carriles, por lo general el nombre de clase para el modelo es primeras letras son mayúsculas, singular. Y el nombre de la tabla de la base de datos suele ser minúscula, plural. Por lo tanto, debe ser Customer.find (: all,: conditions => "customers.date IS NOT NULL") Debería verificar este problema. Un nombre de modelo plural en lugar del singular habitual (Clientes en lugar de Cliente) puede generar mucha confusión a medida que construye su sw. –

+0

La pluralidad de clientes fue desafortunadamente un error tipográfico: uso el Cliente en mi sistema. Gracias Larry! – sscirrus

Respuesta

21

Rails3:

@nonorders = Customers.where("customers.date IS NOT NULL") 

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL") 
+0

Hola Yannis, he subido una pregunta de seguimiento ... todavía estoy recibiendo errores por desgracia. – sscirrus

+1

o @nonorders = Customer.find (: all,: include =>: orders,: conditions => ["orders.order_date IS NOT NULL AND customers.id =?", @ Customer.id]) – Bohdan

1

La cadena se pasa como: condiciones tiene que ser un fragmento de SQL.

En el ejemplo dado "clientes.fecha" se refiere al campo de fecha de la tabla de clientes. Creo que el bit "clientes" no es estrictamente necesario, ya que el nombre de la tabla es claro desde el contexto.

En el ejemplo siguiente debería funcionar:

@nonorders = @customer.orders.find(:all, :conditions => "order_date IS NOT NULL") 
Cuestiones relacionadas