Strange behavior with erb template and iteration

Hello,

I've noticed a strange problem in my custom generator template. At the top of the template, I iterate through the attribute arguments to extract information and construct a Hash. Later in the template, I loop over each_pair of the Hash. The loop executes (I see my DEBUG statement) but the block between the loop never makes it from the template into the output file.

The problem is eliminated if I don't re-define a.name inside my attribute iterator.

<%   table = Hash.new

  attributes.each do |a|     prefix = get_assoc_prefix(a.name) #real attribute name     suffix = get_assoc_suffix(a.name) #attribute metadata     table[prefix] = suffix     a.name = prefix #THIS LINE PREVENTS THE 'if'-block FROM BEING ADDED TO THE OUTPUT FILE   end %>

class <%= class_name %> < ActiveRecord::Base   def precedence     sum = 0 <% ranks_by_attribute.each_pair do |att, rank|     puts "DEBUG: att=#{att}, rank=#{rank}" #THIS ALWAYS PRINTS %>     if self.<%= att %>       sum += <%= rank.to_i %>     end <% end %>     return sum   end end

ruby 1.8.6 (2007-09-23 patchlevel 110) [i686-darwin9.1.0] rails 1.2.5

Am I doing something wrong, or is this a bug?

Thanks, Tom

Opps, bad copy/paste in my simplified case. "table" or "ranks_by_attribute" are the same hash.