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.

Reply via email to