title: Can you override an aliased method in Ruby?
body: <p>In Ruby, when a method is aliased, the alias points to the body of the original method.  So even if you redefine the original method, the alias will continue to use the original definition.  </p>
  
  <pre><code>class Foo
    def bar
      "bar"
    end  
    alias :saloon :bar
  end
  
  class Foo
    def bar
      "BAR"
    end
  end
  
  puts Foo.new.saloon
  </code></pre>
  
  <p>will return 'bar' and not 'BAR'.  Is there any way to get saloon to use the new definition of bar?</p>
  
  <p>EDIT: I should have been more clear.  The example was just an illustration of the issue - it's not the actual problem I need to solve.  The issue is more complex when you have chained aliases, for example, in rails' core.  E.g. perform_action is aliased by benchmarking module, and then also by flash module.  So now a call to perform_action is actually calling perform_action_with_flash which does it's thing, then effectively calls perform_action_with_benchmarking which then calls the original perform_action.  If I want to override perform_action_with_benchmarking (even though I agree it's a bad idea - please let's not get into a discussion of that as it's besides the point), I can't because it has been aliased, and as far as I can tell the alias is pointing to what is essentially a copy of the original perform_action_with_benchmarking, so even if I redefine it, there's no effect. </p>