¿Cómo anular una columna en el modelo Rails?

Tengo un modelo para una de mis tablas de base de datos. Quiero anular el nombre de la columna para esa tabla en particular. ¿Cómo lo lograría?

Por ejemplo, que mi tabla se llame DUMMY y que tenga una columna llamada col_a

 col_a 20 34 42 23 12 

Estaría haciendo un @dummy.col_a . Ahora este método debería devolverme 0 para los números que terminan con 0 y para todo lo demás, debería devolver el valor original. Podría hacerlo definiendo un nuevo método, pero quiero reemplazar el nombre de la columna en sí. Por favor ayuda.

Puedes anular el método col_a . Utilice el método read_attribute para leer el valor en la base de datos. Algo como esto:

 def col_a if self.read_attribute(:col_a).to_s.end_with?('0') 0 else self.read_attribute(:col_a) end end 

Simplemente puede definir un método del mismo nombre que la columna. Para obtener el valor real de la columna, use self [nombre_columna]. Así que algo como esto debería funcionar:

 class Dummy < ActiveModel::Base def col_a self[:col_a] % 10 == 0 ? 0 : self[:col_a] end end 

(Esto supone que col_a es un número entero.)

Puede lograrlo sobrescribiendo los accesores predeterminados como se describe en la documentación. Todos los valores de columna están disponibles automáticamente a través de los accesores básicos en el objeto Registro activo, pero a veces desea especializar este comportamiento. Esto se puede hacer sobrescribiendo los accesores predeterminados (usando el mismo nombre que el atributo) y llamando a read_attribute(attr_name) y write_attribute(attr_name, value) para cambiar realmente las cosas.

Desplácese a la sección de accesores predeterminados de sobrescritura para obtener más información.

Llego un poco tarde a la fiesta aquí, pero una manera realmente elegante de hacerlo es simplemente usar super

 class Dummy < ApplicationRecord def col_a super % 10 === 0 ? 0 : super end end