El día 26 de marzo de 2010 03:57, NachoKB <[email protected]> escribió: > Estimados, > tengo un caso frente al que me quede sin ideas prácticamente. > > Simplificando, tengo un model User que tiene una validación de uniqueness > sobre el atributo login. Ahora bien, debido a que la unica forma de > garantizar unicidad es con un index unique en la base, lo agregué > (básicamente, ActiveRecord no puede garantizar la unicidad por un tema de > concurrencia). > > Ahora mi problema es que la registración de usuario tiene dos pasos > (primero se crea y luego se verifica). Mi problema es que necesitaría que no > valide como erroneo en el caso que exista otro usuario con el mismo login, > pero estando ese usuario aun no activado (digamos "pendiente"). O sea, > quisiera que la verificación de existencia la realice no sobre toda la > tabla, sino, por ejemplo, usando un named_scope. > > Rápidamente cree un método "validates_uniqueness_of_with_named_scope" para > que la verificación del "exists?" la realice sobre un named scope (si fue > especificado), idéntico en todo lo demás al "validates_uniqueness_of" > standard, y funcionó bárbaro. > > Por supuesto, en este caso aunque el validates sea correcto, la base de > datos detecta duplicación por el index unique... > > No se me ocurre manera de soportar este caso sin perder el resguardo del > index unique... ¿alguna idea? ¿cómo lo hacen? > > Perdón la longitud para explicar algo tan simple :D.
La verdad, de lo poco que se entiende, te puedo decir que haría un índice único con la combinación de usuario y algún otro campo que te garantice unicidad solamente en usuario validado. Con postgresql podés hacer varias cosas con triggers o índices funcionales, pero más fácil es tener un campo que se llame por_validar que valga cero cuando está validado y un incremental de los que aún están en proceso. Silvio -- Silvio Quadri _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
