Relaciones 1 to 0-1

Los usuarios pueden ser, o no, socios. Y para dar de alta como socio, el
controller lleva este código:

@usuario = Usuario.find(session[:usuario_id])
@usuario.socio ||= Socio.new
@socio = @usuario.socio
if param_posted?(:socio)
  # Guardo los datos
  if @usuario.socio.update_attributes(params[:socio])
    flash[:notice] = 'Datos de socio del club actualizados.'
    redirect_to usuario_path
  end
end

El problema es que esto dispara las validaciones de la clase socio, y
como hay campos obligatorios, veo la pantalla llena de errores al
entrar… ¿alguna idea?

Fernando C. wrote:

El problema es que esto dispara las validaciones de la clase socio, y
como hay campos obligatorios, veo la pantalla llena de errores al
entrar… ¿alguna idea?

El método update_attribute[1] actualiza un solo atributo y guarda el
registro, este método es sobre-escrito (override) por el módulo
validation para asegurar realizar un skip a los validation checks.

[1] http://rails.rubyonrails.org/classes/ActiveRecord/Base.html#M001056

Espero te sirva.

Jaime Mora R.

On Nov 22, 2007 10:48 AM, Fernando C.
[email protected] wrote:

    redirect_to usuario_path
  end
end

El problema es que esto dispara las validaciones de la clase socio, y
como hay campos obligatorios, veo la pantalla llena de errores al
entrar… ¿alguna idea?

Creo que lo que mencionás es un feature, no un bug :slight_smile: ¿Por qué
querrías que no se disparen las validaciones?

PD: @socio = @usuario.socio.build

Damian J. wrote:

El problema es que esto dispara las validaciones de la clase socio, y
como hay campos obligatorios, veo la pantalla llena de errores al
entrar… �alguna idea?

Creo que lo que mencionas es un feature, no un bug :slight_smile: �Por que
querrias que no se disparen las validaciones?

PD: @socio = @usuario.socio.build

No me he explicado bien: se disparan al ENTRAR en la página de nuevo
socio (con el GET), no al darle al botón de Aceptar (con el POST).
Cuando yo hago el alta de un nuevo usuario (@usuario = Usuario.new), eso
no dispara las validaciones de usuario hasta que pulso el botón de
Aceptar y entra por el (if param_posted?(:usuario)). Pero en el caso de
los socios, la clase hija, parece que por culpa de hacer (@usuario.socio
||= Socio.new) en vez de (@socio = Socio.new), sí se disparan los
controles de validación de socio al entrar en la página de nuevo
socio…

On Nov 22, 2007 2:33 PM, Fernando C.
[email protected] wrote:

No me he explicado bien: se disparan al ENTRAR en la página de nuevo
socio (con el GET), no al darle al botón de Aceptar (con el POST).
Cuando yo hago el alta de un nuevo usuario (@usuario = Usuario.new), eso
no dispara las validaciones de usuario hasta que pulso el botón de
Aceptar y entra por el (if param_posted?(:usuario)). Pero en el caso de
los socios, la clase hija, parece que por culpa de hacer (@usuario.socio
||= Socio.new) en vez de (@socio = Socio.new), sí se disparan los
controles de validación de socio al entrar en la página de nuevo
socio…

Y si lo
hacés así:
@socio = @usuario.socio || @usuario.socio.build

Damian J. wrote:

On Nov 22, 2007 2:33 PM, Fernando C.
[email protected] wrote:

No me he explicado bien: se disparan al ENTRAR en la p�gina de nuevo
socio (con el GET), no al darle al bot�n de Aceptar (con el POST).
Cuando yo hago el alta de un nuevo usuario (@usuario = Usuario.new), eso
no dispara las validaciones de usuario hasta que pulso el bot�n de
Aceptar y entra por el (if param_posted?(:usuario)). Pero en el caso de
los socios, la clase hija, parece que por culpa de hacer (@usuario.socio
||= Socio.new) en vez de (@socio = Socio.new), s� se disparan los
controles de validaci�n de socio al entrar en la p�gina de nuevo
socio…

Y si lo
hac�s as�:
@socio = @usuario.socio || @usuario.socio.build

Así perfecto, muchas gracias!!

Por cierto, lo mío estaba copiado clavadito del libro “Railsspace”, si
alguien lo tiene que tome nota de este fallo.

Muchas gracias de nuevo, Damian…