define_method: Comment créer dynamiquement des méthodes avec des arguments

Je veux créer un tas de méthodes pour une find_by fonctionnalité. Je ne veux pas écrire la même chose encore et encore si je veux utiliser la métaprogrammation.

Dis que je veux créer une méthode pour trouver par nom, d'accepter le nom comme argument. Comment aurais-je le faire? J'ai utilisé define_method dans le passé, mais je n'ai pas d'arguments en faveur de la méthode à suivre.
Voici mon (mauvais) approche

["name", "brand"].each do |attribute|
    define_method("self.find_by_#{attribute}") do |attr_|
      all.each do |prod|
        return prod if prod.attr_ == attr_
      end
    end
  end

Toute pensée? Merci à l'avance.

Être au courant si tout est un grand ensemble de données, ce qui pourrait provoquer des problèmes de performances. Aussi, j'espère sincèrement que c'est à l'extérieur des rails contexte rails implémente déjà find_by_XXX pour chaque attribut.
Remarque: cela permettra de définir deux méthodes nommées self.find_by_name et self.find_by_brand. Alors qu'il est possible de créer de telles méthodes, il est impossible d'appeler à l'aide de la méthode habituelle syntaxe d'appel, parce que . n'est pas un caractère juridique à un identificateur. Est-il une raison particulière pour laquelle vous souhaitez définir une méthode illégale d'un nom?
Ce n'est pas les rails! tout simplement renvoie un tableau de Products pour le système de gestion des stocks d'un magasin de Jouets. C'est pour le projet final pour le Ruby Nanodegree à Udacity.
Je n'avais aucune idée à ce sujet, et je me demandais pourquoi le NoMethodError, depuis que j'ai eu une auto.quelque chose de méthode.

OriginalL'auteur Kostas Andrianos | 2016-07-06