Je suis habitué à Django où vous pouvez exécuter plusieurs méthodes de filtrage sur les jeux de requête, par exemple Item.all.filter(foo="bar").filter(something="else")
.Filtrage des requêtes ActiveRecord dans les rails
Cependant, ce n'est pas si facile à faire dans Rails. Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
renvoie un tableau qui signifie cela ne fonctionnera pas:
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
Alors je me suis le meilleur moyen de filtres « pile » est de modifier le tableau des conditions et puis exécutez la requête.
Alors je suis venu avec cette fonction:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
Utilisation:
array1 = [ "foo =: foo", {: 'bar' foo =}] array2 = [ "quelque chose =: quelque chose », {: quelque chose = 'else'}] = conditions se combinent (array1, array2) articles = Item.find (: all,: conditions => conditions)
Cela a fonctionné assez bien. Cependant, je veux être en mesure de combiner un nombre arbitraire de tableaux, ou essentiellement un raccourci pour l'écriture:
conditions = combine(combine(array1,array2),array3)
Quelqu'un peut-il aider? Merci d'avance.
Oui, c'est exactement ce que je veux. J'ai regardé le screencast et cela m'a semblé logique. Mais dès que j'ai déclenché le code, j'ai reçu une erreur disant que la portée nommée était une méthode non définie. Ensuite, j'ai remarqué que je travaillais avec Rails 1.8, donc j'ai mis à jour les rails à 2.3.quelque chose et toujours eu la même erreur .... euh, je savais que les étendues nommées étaient trop belles pour être vraies:/ – user94154
Si vous avez gelé Rails, alors votre code utilise toujours une version précédente de Rails. Rails 1.8 n'a jamais existé, vous devez donc dire Ruby 1.8. rails -v est une commande qui vous dira quelle version de Rails existe sur la ligne de commande. script/about vous en dira plus sur l'environnement de votre application. –
bien le script ruby / à propos n'a pas été reconnu. Que veut dire congelé en termes de Rails? – user94154