No problem. I'm happy to help. I noticed the same thing about some databases being case insensitive, but I don't know enough about the different database systems to be confident relying on that fact myself.
-David On Tue, Feb 23, 2010 at 3:41 PM, GoodGets <[email protected]> wrote: > Thanks David. > That's almost exactly what I did. However, I used username_down > instead of _key. Don't know why you needed to know that, but... > you're welcome. > > Anyway, after looking into this even more, I found that some databases > are case insensitive by default. So instead of this being a rails > "problem," I think it's more of a database issue since some databases > will find the correct result no matter the casing. I think it all > depends on which database you use (postgresql, mysql, etc) and how > they're encoded. > > Either way, if the database is case Insensitive, well I at least now > know the fix. Thanks again David. > > > On Feb 23, 3:44 pm, David Cuddeback <[email protected]> wrote: >> GoodGets, >> >> The way I solved this in my app was to have two columns for the >> username. One is called "username," which stores the username the way >> the user wants it to be displayed (with capitalization), and one >> called "username_key," which is the username converted to lowercase. >> In my User model, I have this method: >> >> def username=(value) >> write_attribute :username, value >> write_attribute :username_key, (value ? value.downcase : nil) >> end >> >> With a unique index on "username_key," I'm sure that the database will >> enforce unique usernames without case sensitivity and I can preserve >> the capitalization that the user prefers. I use >> User.find_by_username_key(username.downcase) to find users. >> >> -David >> >> >> >> On Mon, Feb 22, 2010 at 7:30 PM, GoodGets <[email protected]> wrote: >> >> Yep, but you can't have it both ways. If you have users JoeBob and >> >> JOEbob and the browser requests "JoEbOb", which record do you return? >> >> You have to pick one and half the time you'll pick wrong. >> >> >> What you could do is require uniqueness on username's regardless of >> >> caps, but let them use caps to make username's easier to read... then >> >> you wouldn't have the conflict. >> >> > That's what I was doing >> > validates_uniqueness_of :username, :case_sensitive => false >> > which prevents JoeBob and JOEbob from signing up. And that might be >> > the way it has to stay, >> >> > But, this got me thinking: >> > User.find_by_username(params[:user].downcase) >> > This will find the correct person in the db and return no errors, no >> > matter how many capitalizations someone uses in the URL. But this >> > only works if the original user signed up with no capitalizations in >> > his/her name. >> >> > So, if the user signed up as joebob, then JOEbob, JoEbOb, or any other >> > variation will return the correct result, AND it will leave the URL >> > just as the user entered it, caps and all. >> >> > But, this doesn't work if the user originally signed up with caps in >> > his name. So, what if I were to create an index in the table for the >> > usernames and pass in the option downcase. I think it would work >> > perfectly then, but I'm not sure if this can be done? >> >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "Ruby on Rails: Talk" group. >> > To post to this group, send email to [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]. >> > For more options, visit this group >> > athttp://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

