2010-09-29 9 views
9

Je suis en train de définir deux variables comme suit:Trouver tous les enregistrements qui ont un champ non nul?

  1. @orders = Customer.find_all_by_order_date (néant)
  2. @nonorders = Customer.find_all_by_order_date (! Nil)

La première fonctionne correctement mais la seconde ne le fait pas. Comment puis-je trouver les clients dont les champs order_date ne sont pas nuls?


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

me donne l'erreur suivante:

méthode non définie `extract_options_from_args! ' pour ActiveRecord :: Base: Class

J'ai essayé de changer les conditions, telles que @ orders.order_date, @ customer.order.order_date, etc. Quelle est l'origine de cette erreur? Je vous remercie!

+0

Dans Rails, généralement le nom de la classe pour le modèle est le premier lettres sont, singulier supérieur. Et le nom de la table de base de données est généralement minuscule, pluriel. Donc, il devrait être Customer.find (: all,: conditions => "customers.date IS NOT NULL") Vous devriez vérifier dans ce problème. Un nom de modèle pluriel au lieu du singulier habituel (Clients au lieu du Client) peut entraîner beaucoup de confusion lorsque vous construisez votre sw. –

+0

Les clients pluriel était malheureusement une faute de frappe - J'utilise le client dans mon système. Merci Larry! – sscirrus

Répondre

21

Rails3:

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

Rails2:

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

Salut Yannis, J'ai téléchargé une question de suivi ... toujours des erreurs malheureusement. – sscirrus

+1

ou @nonorders = Customer.find (: all,: include =>: commandes,: conditions => ["orders.order_date N'EST PAS NULL ET customers.id =?", @ Customer.id]) – Bohdan

1

La chaîne que vous passez comme: les conditions doit être un fragment sql.

Dans l'exemple donné, "customers.date" fait référence au champ de date de la table des clients. Je pense que le bit "clients" n'est pas strictement nécessaire, car le nom de la table est clair à partir du contexte.

Dans votre exemple, ce qui suit devrait fonctionner:

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