przykro mi, że nie znam żadnego pluginu, aby to zrobić. Ale mam sugestię wdrożenia.
Chodzi o to, aby dodać model "DynamicField", który byłby mającą wiele relacji z modelem Contact. Jeśli brakuje metody w modelu Contact, w takim przypadku należy sprawdzić, czy istnieje pole dynamiczne do pobrania.
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
Trzeba będzie dodać regex jeśli chcesz dodać wirtualnych atrybutów z atrybutem = metoda (wykrywanie obecności a „=” i robi aktualizacji zamiast tylko uzyskanie wartości). Ale już masz pomysł.
Gdy ta metoda nie istnieje, sprawdzamy pola dynamiczne, jeśli istnieje taka sama nazwa. Jeśli nie ma (field.nil?), Podnosimy NoMethodError. W przeciwnym razie zwracamy.
Więc można uzyskać listę wszystkich pól z następujących czynności:
Contact.find(:first).dynamic_fields
i pobrać konkretny jedną z następujących czynności:
Contact.find(:first).my_dynamic_field