2010-12-05 7 views
0

J'ai une application Rails3 utilisant ActiveRecord 3.0.3.Somme d'enregistrement active avec 2 arguments

J'essaye d'obtenir une somme pour une table basée sur 2 champs de sous-requête dans cette table.

Utiliser Rails console, je peux l'obtenir pour revenir avec la valeur correcte comme ceci:

result = MyObject.sum(:foo, :conditions => "foo_id = #{self.id} AND bar_id = #{self.bar_id}") 

Cependant, je ne pouvais pas obtenir de travailler avec quelque chose comme ceci:

result = MyObject.sum(:foo, :conditions => "foo_id = ? AND bar_id = ?", self.id, self.bar_id) 

Cela entraînerait: erreur de syntaxe, inattendue ',', attendu tASSOC

Ma question: Donc, j'ai un code qui produit la valeur correcte. Mais je m'inquiète de l'injection possible de SQL le faire de cette façon? Normalement, vous utiliseriez des paramètres avec des requêtes d'enregistrement actives et cela ressemble un peu plus à une concaténation. Je suis encore en train d'apprendre mon chemin autour de Active Record. Merci pour tout conseil.

Répondre

1

Je pense que je l'ai juste compris. Il était difficile de trouver des exemples pour cela, mais il suffit d'entourer les arguments avec des parenthèses (en les regroupant dans un tableau).

Alors:

result = MyObject.sum(:foo, :conditions => "foo_id = #{self.id} AND bar_id = #{self.bar_id}") 

devient:

result = MyObject.sum(:foo, :conditions => ["foo_id = ? AND bar_id = ?", self.id, self.bar_id])