En un modelo ActiveRecord::Base
, que puede restablecer el estado del modelo de lo que era cuando lo tengo de la base de datos con reload
, siempre y cuando el atributo Soy la creación de mapas para una columna de tabla:¿Hay una API limpia para restablecer las variables de instancia en 'volver a cargar' en ActiveRecord?
user = User.first
user.email #=> "[email protected]"
user.email = "[email protected]"
user.email #=> "[email protected]"
user.reload
user.email #=> "[email protected]"
Pero si añado un atributo personalizado, la única forma que he encontrado que tienen que actuar de la misma es la siguiente:
class User < ActiveRecord::Base
attr_accessor :user_agent
def reload
super
self.user_agent = nil
self
end
end
Mi pregunta es, ¿hay alguna API para hacer bases de datos no-columna-atributos reiniciar al volver a cargar? Algo como:
class User < ActiveRecord::Base
# this
reloadable_attr_accessor :user_agent
# or this
def user_agent
@user_agent
end
def user_agent=(value)
set_instance_var_that_resets_on_reload("@user_agent", value)
end
end
¿Existe eso en Rails?
+1. Ojalá el equipo de los raíles proporcione una forma más clara de conectar los atributos virtuales en los modelos de vida AR. Tal vez podríamos sugerirles que lo hagan? Realmente podía ver una macro 'virtual_attribute', que se ocuparía de los problemas de recarga y la suciedad. –