2017-08-24 1 views
-1

J'ai une méthode, qui prend un tableau d'objets d'enregistrement actifs de rails et de trier ces enregistrements en fonction du deuxième paramètre passé dans la méthode. La méthode ressemble à:Passer les attributs d'enregistrement actifs dans une méthode

def sort_provider(providers, attr) 
    provider.sort!(|a,b| a."#{attr}" <=> b."#{attr}") 
end 

Quand j'appelle la méthode, sort_providers(providers, "name"), je reçois un unexpected tSTRING_BEG, expecting '('.

Comment puis-je obtenir la méthode pour trier la matrice en fonction du deuxième paramètre transmis?

Répondre

0

Essayez d'utiliser send

providers.sort_by! { |a, b| a.send(attr) <=> b.send(attr) } 
+0

Cheers, cela a fonctionné! – Dan

0

Si attr est un symbole:

providers.sort_by(&attr)