2010-09-29 14 views
9

Sto cercando di definire due variabili come segue:Trova tutti i record che hanno un campo diverso da zero?

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

I primi lavori correttamente ma il secondo no. Come posso trovare quei clienti i cui campi order_date non sono nulli?


@nonorders = @ customer.orders.find (: all,: condizioni => "@ customer.orders.order_date non è nullo")

mi sta dando il seguente errore:

metodo non definito `extract_options_from_args! ' per ActiveRecord :: Base: Classe

Ho provato a modificare le condizioni, ad esempio @ orders.order_date, @ customer.order.order_date, ecc. Che cosa sta causando questo errore? Grazie!

+0

In Rails, di solito il nome della classe del modello è prime lettere sono maiuscole, singolare. E il nome della tabella del database è in genere in minuscolo, al plurale. Quindi dovrebbe essere Customer.find (: all,: conditions => "customers.date IS NOT NULL") Dovresti controllare questo problema. Un nome di modello plurale invece del solito singolare (clienti anziché cliente) può portare a molta confusione mentre si costruisce il proprio sw. –

+0

I clienti plurali è stato sfortunatamente un errore di battitura - io uso il cliente nel mio sistema. Grazie Larry! – sscirrus

risposta

21

Rails3:

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

Rails2:

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

Ciao Yannis, ho caricato una domanda di follow-up ... ancora ricevendo errori sfortunatamente. – sscirrus

+1

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

1

La stringa che si passa come: condizioni ha bisogno di essere un frammento di sql.

Nell'esempio fornito "customers.date" fa riferimento al campo della data della tabella clienti. Penso che il bit "clienti" non sia strettamente necessario, in quanto il nome della tabella è chiaro dal contesto.

Nel tuo esempio il seguente dovrebbe funzionare:

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