Nous avons un modèle d'association qui ressemble à quelque chose comme ceci :
class Example < ActiveRecord::Base
has_many :others, :order => 'others.rank'
end
La colonne rang est un type entier. Les détails de ces modèles particuliers ne sont cependant pas vraiment importants car nous avons trouvé le même problème avec d'autres associations has_many entre d'autres modèles.
Nous avons également ajouté au module Enumerable :
module Enumerable
def method_missing(name)
super unless name.to_s[0..7] == 'collect_'
method = name.to_s[8..-1]
collect{|element| element.send(method)}
end
end
Cela ajoute une méthode collect_id que nous pouvons utiliser pour obtenir un tableau d'identifiants d'enregistrement à partir d'un tableau d'objets ActiveRecord.
Ainsi, si nous utilisons une recherche normale ActiveRecord find :all, nous obtenons un joli tableau sur lequel nous pouvons ensuite utiliser collect_id, mais si nous utilisons Example.others.collect_id, nous obtenons
NoMethodError: undefined method `collect_id' for #<Class:0x2aaaac0060a0>
Example.others.class renvoie "Array", donc il ment ou il est confus ?
Notre solution jusqu'à présent a été de l'utiliser de cette façon :
Example.others.to_a.collect_id
Cela fonctionne mais cela semble un peu étrange. Pourquoi devez-vous faire cela ?
Nous sommes sous Ruby 1.8.7 et Rails 2.3.4.