Lo siento, no sé de ningún plugin para hacer eso. Pero tengo una sugerencia de implementación.
La idea es añadir un modelo "DynamicField", que sería una relación has_many al modelo de contacto. Cuando falta un método en el modelo de contacto, verifica si hay un campo dinámico para recuperarlo si ese es el caso.
class DynamicField < ActiveRecord::Base
belongs_to :contact
end
class Contact < ActiveRecord::Base
has_many :dynamic_fields
def method_missing(sym, *args, &block)
begin
super
rescue
field = dynamic_fields.find_by_name(sym)
end
raise ActiveRecord::NoMethodError if field.nil?
field.value
end
end
Usted tendrá que añadir una expresión regular si desea agregar atributos virtuales con el atributo = método (detección de la presencia de un "=" y hacer una actualización en lugar de obtener sólo el valor). Pero ya tienes aquí la idea.
Cuando no existe el método, comprobamos los campos dinámicos si hay uno con el mismo nombre. Si no hay (field.nil?), Levantamos un NoMethodError. De lo contrario, lo devolvemos.
Por lo que podría obtener una lista de todos sus campos con la siguiente:
Contact.find(:first).dynamic_fields
y recuperar uno específico con lo siguiente:
Contact.find(:first).my_dynamic_field