Technology Agnostic Rubyist : Open Source Lights The Way

Friday, February 22, 2008

State abbreviations in a database

I use an excellent state_select Ruby plugin to generate nice looking dropdown lists for web pages.

Unfortunately this plugin uses full state names instead of abbeviations, both in the view and in the values that are submitted to the database.

I want
<option value="NY">New York

instead of
<option value="New York">New York

The change I want is easy to achieve by modifying /lib/state_select.rb

Comment out the values for US_STATES and add this bit of code instead. Note Puerto Rico and outlying territories have been omitted, since these are considered international locations in my program.
US_STATES=[
[ "Alabama", "AL" ],
[ "Alaska", "AK" ],
[ "Arizona", "AZ" ],
[ "Arkansas", "AR" ],
[ "California", "CA" ],
[ "Colorado", "CO" ],
[ "Connecticut", "CT" ],
[ "Delaware", "DE" ],
[ "District Of Columbia", "DC" ],
[ "Florida", "FL" ],
[ "Georgia", "GA" ],
[ "Hawaii", "HI" ],
[ "Idaho", "ID" ],
[ "Illinois", "IL" ],
[ "Indiana", "IN" ],
[ "Iowa", "IA" ],
[ "Kansas", "KS" ],
[ "Kentucky", "KY" ],
[ "Louisiana", "LA" ],
[ "Maine", "ME" ],
[ "Maryland", "MD" ],
[ "Massachusetts", "MA" ],
[ "Michigan", "MI" ],
[ "Minnesota", "MN" ],
[ "Mississippi", "MS" ],
[ "Missouri", "MO" ],
[ "Montana", "MT" ],
[ "Nebraska", "NE" ],
[ "Nevada", "NV" ],
[ "New Hampshire", "NH" ],
[ "New Jersey", "NJ" ],
[ "New Mexico", "NM" ],
[ "New York", "NY" ],
[ "North Carolina", "NC" ],
[ "North Dakota", "ND" ],
[ "Ohio", "OH" ],
[ "Oklahoma", "OK" ],
[ "Oregon", "OR" ],
[ "Pennsylvania", "PA" ],
[ "Rhode Island", "RI" ],
[ "South Carolina", "SC" ],
[ "South Dakota", "SD" ],
[ "Tennessee", "TN" ],
[ "Texas", "TX" ],
[ "Utah", "UT" ],
[ "Vermont", "VT" ],
[ "Virginia", "VA" ],
[ "Washington", "WA" ],
[ "West Virginia", "WV" ],
[ "Wisconsin", "WI" ],
[ "Wyoming", "WY" ] ] unless const_defined?("US_STATES")
But what happens to the data that has already started been saved with long unabbreviated state names? I need to update that too. I could have written a migration file to do this - but instead just used quick and dirty sql update statements.

This is the code that I used. It's very straightforward, but I'm posting it here anyway with the hope that someone can copy/paste it and save themself the hassle of writing 50+ updates from scratch.
update addresses set state = 'AL' where [state]= 'Alabama'
update addresses set state = 'AK' where [state]= 'Alaska'
update addresses set state = 'AZ' where [state]= 'Arizona'
update addresses set state = 'AR' where [state]= 'Arkansas'
update addresses set state = 'CA' where [state]= 'California'
update addresses set state = 'CO' where [state]= 'Colorado'
update addresses set state = 'CT' where [state]= 'Connecticut'
update addresses set state = 'DE' where [state]= 'Delaware'
update addresses set state = 'DC' where [state]= 'District Of Columbia'
update addresses set state = 'FL' where [state]= 'Florida'
update addresses set state = 'GA' where [state]= 'Georgia'
update addresses set state = 'HI' where [state]= 'Hawaii'
update addresses set state = 'ID' where [state]= 'Idaho'
update addresses set state = 'IL' where [state]= 'Illinois'
update addresses set state = 'IN' where [state]= 'Indiana'
update addresses set state = 'IA' where [state]= 'Iowa'
update addresses set state = 'KS' where [state]= 'Kansas'
update addresses set state = 'KY' where [state]= 'Kentucky'
update addresses set state = 'LA' where [state]= 'Louisiana'
update addresses set state = 'ME' where [state]= 'Maine'
update addresses set state = 'MD' where [state]= 'Maryland'
update addresses set state = 'MA' where [state]= 'Massachusetts'
update addresses set state = 'MI' where [state]= 'Michigan'
update addresses set state = 'MN' where [state]= 'Minnesota'
update addresses set state = 'MS' where [state]= 'Mississippi'
update addresses set state = 'MO' where [state]= 'Missouri'
update addresses set state = 'MT' where [state]= 'Montana'
update addresses set state = 'NE' where [state]= 'Nebraska'
update addresses set state = 'NV' where [state]= 'Nevada'
update addresses set state = 'NH' where [state]= 'New Hampshire'
update addresses set state = 'NJ' where [state]= 'New Jersey'
update addresses set state = 'NM' where [state]= 'New Mexico'
update addresses set state = 'NY' where [state]= 'New York'
update addresses set state = 'NC' where [state]= 'North Carolina'
update addresses set state = 'ND' where [state]= 'North Dakota'
update addresses set state = 'OH' where [state]= 'Ohio'
update addresses set state = 'OK' where [state]= 'Oklahoma'
update addresses set state = 'OR' where [state]= 'Oregon'
update addresses set state = 'PA' where [state]= 'Pennsylvania'
update addresses set state = 'RA' where [state]= 'Rhode Island'
update addresses set state = 'SC' where [state]= 'South Carolina'
update addresses set state = 'SD' where [state]= 'South Dakota'
update addresses set state = 'TN' where [state]= 'Tennessee'
update addresses set state = 'TX' where [state]= 'Texas'
update addresses set state = 'UT' where [state]= 'Utah'
update addresses set state = 'VT' where [state]= 'Vermont'
update addresses set state = 'VA' where [state]= 'Virginia'
update addresses set state = 'WA' where [state]= 'Washington'
update addresses set state = 'WV' where [state]= 'West Virginia'
update addresses set state = 'WI' where [state]= 'Wisconsin'
update addresses set state = 'WY' where [state]= 'Wyoming'

No comments:

Tweets

Contributors