Estoy tratando de actualizar un campo usando update_all. Sin embargo, necesito que se tome el valor de otro campo que se vuelve a escribir en mi formato específico.Usando el método Rails update_all para actualizar campos con valor de otra columna
Si tengo algo como esto en mi modelo:
def self.clean_mac_address()
clean_mac_address = :macaddress.gsub(/[^0-9a-z]/i, '')
end
Cuando ejecuto esto:
Radacct.update_all("mac_clean = #{clean_mac_address}")
me sale un error:
NoMethodError: undefined method `gsub' for :macaddress:Symbol
¿Alguna idea de cómo puedo ¿hacer esto? ¿O hay una manera más simple de actualizar el campo?
Dudo si se puede usar método '' gsub' en un symbol'. Puede ser esa es la razón por la que está recibiendo un error. – uday
Primero, ¿por qué llamas 'gsub' a un símbolo? Segundo, si entiendo correctamente, quiere calcular y llenar la columna 'mac_clean' basada en otra columna para cada registro. En ese caso, puede usar 'update_all' solo si realiza toda la manipulación en SQL ya que' update_all' ejecutará la actualización que le está pasando como una cadena en todos los registros, pero no los cargará de DB y ganó ' t inicializar instancias de modelo. Eso significa que está tratando con consultas SQL y no tiene acceso directo a los atributos 'ActiveRecord'. –
@ KL7: no se supone que macaddress sea un símbolo; debe ser una cadena. Entonces, ¿tengo que escribir algo para recorrer cada registro y actualizar? Estoy un poco confundido – simonmorley