Auto-incrementing column

Ok, I have an table column that needs to auto-increment, but isn’t the
primary key (although I guess it could be). The format for the column
is “SR001234” and it needs to autoincrement like so:
SR001234
SR001235
SR001236

SR999999

How can I do this? I know Ruby has some pretty nice constructs for
doing things like this, but I just don’t quite see how to put them
into Rails yet.

Could you just add a method to your model that takes the primary key and
returns a string formatted the way you have it listed below?

Something like this:

def get_sr
sr = self.id.to_s

check the length

raise “id too long” if 6 < sr.length

pad with zeroes (there’s probably a better way to do this)

(6 - sr.length).times do
sr = “0” + sr
end

return “SR” + sr
end

-Dan

On Sep 18, 2007, at 8:35 PM, Dan F. wrote:

pad with zeroes (there’s probably a better way to do this)

(6 - sr.length).times do
sr = “0” + sr
end

return “SR” + sr

Basing the generation on the very ID is a good approach because you
still delegate the generation of sequence to the database. That
guarantees it is right. As long as it is OK to save the record
without that extra key, and save it afterwards (you don’t have the ID
before the INSERT), perhaps with an AR hook.

String formatting a la sprintf is easier here:

irb(main):001:0> “SR%06d” % 23
=> “SR000023”

– fxn