Es tut mir leid ich nicht jedes Plugin wissen das zu tun. Aber ich habe einen Umsetzungsvorschlag.
Die Idee besteht darin, ein "DynamicField" -Modell hinzuzufügen, das eine has_many-Beziehung zum Kontaktmodell wäre. Wenn eine Methode im Kontaktmodell fehlt, prüfen Sie, ob in diesem Fall ein dynamisches Feld vorhanden ist, um sie abzurufen.
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
Sie müssen einen regulären Ausdruck hinzufügen, wenn Sie virtuelle Attribute mit dem Attribut = Methode (Nachweis des Vorhandenseins eines „=“ und macht ein Update statt nur immer den Wert) hinzufügen möchten. Aber Sie haben schon hier die Idee.
Wenn die Methode nicht existiert, überprüfen wir die dynamischen Felder, wenn es einen mit dem gleichen Namen gibt. Wenn nicht (field.nil?), Wird ein NoMethodError ausgelöst. Ansonsten geben wir es zurück.
So können Sie eine Liste aller Felder, die mit der folgenden erhalten:
Contact.find(:first).dynamic_fields
Und eine spezifische mit der folgenden abrufen:
Contact.find(:first).my_dynamic_field