Je suis désolé, je ne connais pas de plug-in pour le faire. Mais j'ai une suggestion de mise en œuvre.
L'idée est d'ajouter un modèle "DynamicField" qui serait une relation has_many avec le modèle Contact. Lorsque vous avez une méthode manquante dans le modèle Contact, vous vérifiez s'il existe un champ dynamique pour le récupérer si c'est le cas.
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
Vous aurez besoin d'ajouter un regex si vous souhaitez ajouter des attributs virtuels avec l'attribut = méthode (détection de la présence d'un « = » et de faire une mise à jour au lieu de seulement obtenir la valeur). Mais vous avez déjà ici l'idée. Lorsque la méthode n'existe pas, nous vérifions les champs dynamiques s'il y en a un avec le même nom. S'il n'y a pas (field.nil?), Nous levons une NoMethodError. Sinon, nous le retournons.
Ainsi, vous pouvez obtenir une liste de tous vos champs avec les éléments suivants:
Contact.find(:first).dynamic_fields
et récupérer un spécifique avec les éléments suivants:
Contact.find(:first).my_dynamic_field