2012-03-26 7 views
5

Tengo el siguiente problema. Tengo un modelo llamado usuario que tiene una columna llamada activada. Estoy tratando de actualizar ese valor con el método activado ?, pero me da el error: Validación fallida: la contraseña no puede estar en blanco, la contraseña es demasiado corta (mínimo 6 caracteres) Lo cual no tiene sentido para mí, porque no estoy tocando el campo de contraseña! Solo quiero actualizar la columna activada. Estoy poniendo aquí el código, creo que es relevante, pero si crees que necesitas más, solo pregunta :) ¡Muchas gracias de antemano!Rails update_attribute

Modelo:

attr_accessor :password 
attr_accessible :name, :email, :password, :password_confirmation, :activated 
has_many :sucu_votes 

email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

validates :name, :presence => true, 
            :length => { :maximum => 50 } 

validates :email, :presence => true, 
            :format => {:with => email_regex}, 
            :uniqueness => { :case_sensitive => false } 

validates :password, :presence => true, 
             :length => { :within => 6..15 }, 
             :confirmation => true 

before_save :encrypt_password 

def activated? 
    self.update_attributes!(:activated => true) 
    return self.activated 
end 

Controlador de la cual activa el método? se llama

def activate 
if request.get? 
     user=User.find_by_id(params[:id]) 
     if user.activated? 
      flash[:notice]="Your account has been activated" 
      #redirect_to :controller => 'sessions', :action => 'new' 
     else 
      flash[:error]="We couldnt activate the account" 
      redirect_to :controller => 'sessions', :action => 'new' 
     end 
    end 
end 

Respuesta

12

dos cosas, en primer lugar la convención rubí es utilizar métodos precedentes para devolver verdadero o falso y no hacer nada más como actualizar un registro. Eso no está causando su problema, pero es una desviación de lo que otros programadores esperarían. En segundo lugar, en vez de llamar update_attributes intente Es llamando:

update_attribute(:activated, true)

Esto debería saltarse el resto de las devoluciones de llamada para el registro

+0

Muchas gracias! De hecho, ya lo tenía antes, pero no funcionaba por otra razón. Pero todo está bien ahora :) – gumlym