Foros del Web » Programando para Internet » Ruby »

[SOLUCIONADO] No se actualiza un registro en la DB

Estas en el tema de No se actualiza un registro en la DB en el foro de Ruby en Foros del Web. Hola amigos, estoy comenzando con rails y necesito actualizar un registro de la DB tengo esto Código: def activate if params[:user] && params[:hash] @user = ...
  #1 (permalink)  
Antiguo 10/12/2013, 00:56
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 18 años, 2 meses
Puntos: 22
Pregunta No se actualiza un registro en la DB

Hola amigos, estoy comenzando con rails y necesito actualizar un registro de la DB

tengo esto


Código:
def activate
    if params[:user] && params[:hash] 
      @user = User.find_by user: params[:user]
      require 'digest/sha1'
      @hash = Digest::SHA1.hexdigest @user[:id].to_s
      if params[:hash] == @hash
        user = User.find_by(id: 1)
        user.update(firstname: 'Dave')
        flash.notice = "Si se activa."
      else
        flash.alert = "No se activa "
      end
      redirect_to action: :home
    else
      redirect_to action: :login
    end
  end
como ven si se cumplen las validaciones debería actualizar el usuario id 1 cambiando firstname por 'Dave' pero aunque se cumplen todas las condicionales no actualiza.
  #2 (permalink)  
Antiguo 10/12/2013, 01:13
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: No se actualiza un registro en la DB

ya viste los logs? se esta ejecutando el query?
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 10/12/2013, 01:23
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 18 años, 2 meses
Puntos: 22
Respuesta: No se actualiza un registro en la DB

Algo tan simple como esto:

Código rails:
Ver original
  1. User.find(3).save(firstname: 'Davssssse')

Me genera estos logs

Processing by PagesController#home as HTML
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
(0.2ms) BEGIN
User Exists (0.3ms) SELECT 1 AS one FROM `users` WHERE (`users`.`user` = BINARY 'templario18' AND `users`.`id` != 3) LIMIT 1
User Exists (0.2ms) SELECT 1 AS one FROM `users` WHERE (`users`.`email` = BINARY '[email protected]' AND `users`.`id` != 3) LIMIT 1
(0.3ms) ROLLBACK


Segun lo que veo busca y encuentra el usuario en cuestion, pero cuando va a editar cambia la consulta SQL colocando users.id != 3 entonces no entiendo que pasa.
  #4 (permalink)  
Antiguo 10/12/2013, 01:27
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 18 años, 2 meses
Puntos: 22
Respuesta: No se actualiza un registro en la DB

acabo de comprobar que es por algo de las validaciones del modelo, poerque si las elimino funciona bien, pero no se que podria ser:

Código Rails:
Ver original
  1. class User < ActiveRecord::Base
  2.   has_many :result
  3.   validates :user, uniqueness: true, length: { in: 6..20, message: ": El usuario debe tener entre 6 y 20 caracteres sin espacios ni signos." }
  4.   validates :email, uniqueness: true, presence: true, email: true ,confirmation: true
  5.   validates :email_confirmation, presence: { message: ": Es obligatorio"}
  6.   validates :password , presence: true , confirmation: true
  7.   validates :password_confirmation, presence: { message: ": Es obligatorio"}
  8. end
  #5 (permalink)  
Antiguo 10/12/2013, 01:30
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: No se actualiza un registro en la DB

lo de != son las validaciones, si ves en el log dice 'User Exists' y despues hace el rollback,revisa si tienes registros invalidos en la db
__________________
>> abimaelmartell.com
  #6 (permalink)  
Antiguo 10/12/2013, 01:34
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 18 años, 2 meses
Puntos: 22
Respuesta: No se actualiza un registro en la DB

Listo ya lo encontre, basto con quitar estos

Código Rails:
Ver original
  1. validates :email_confirmation, presence: { message: ": Es obligatorio"}
  2. validates :password_confirmation, presence: { message: ": Es obligatorio"}

imagino que es por que la validacion dice que son obligatorios pero no existen realmente en el modelo, solo en el formulario de registro.

Etiquetas: rails
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:19.