define_method: How to dynamically create methods with arguments
<p>I want to create a bunch of methods for a find_by feature. I don't want to write the same thing over and over again so I want to use metaprogramming.</p>

<p>Say I want to create a method for finding by name, accepting the name as an argument. How would I do it? I've used define_method in the past but I didn't have any arguments for the method to take. 
Here's my (bad) approach</p>

<pre><code>["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
</code></pre>

<p>Any thoughts? Thanks in advance.</p>