Ich bin herumalbern mit der Erstellung eines Rails Juwel und ich habe Probleme beim Hinzufügen von Methoden zu ActiveRecord. Sagen wir, ich folgendes tun:Rails: Appending Methoden zu ActiveRecord (der richtige Weg?)
class DemoModel < ActiveRecord::Base
custom_method :first_argument, :second_argument
end
Um diese Arbeit zu machen, ich werfe in den folgenden:
module DemoMethod
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def custom_method(*fields)
@my_fields = fields
end
end
end
ActiveRecord::Base.send(:include, DemoMethod)
So weit, so gut.
Das Problem ist, ich möchte dann auf diese my_fields-Variable von der Instanz des Modells zugreifen. Zum Beispiel habe ich eröffnen könnte form_for mit so etwas wie:
module ActionView::Helpers::FormHelper
def fields_for(record_name, record_object, options = {}, &block)
the_fields = record_object.<I WANNA ACCESS @my_fields HERE!!!>.html_safe
# ...
end
end
Die Schwierigkeit besteht darin, ‚custom_method‘ scheint nur zu arbeiten, wenn ich die Helfer als Klassenmethode festgelegt, aber das bedeutet .self ist jetzt das Modell (DemoModel) anstelle des DemoModel-Objekts, an dem ich arbeiten möchte. Ich könnte das Objekt manuell mit "custom_method self,: first_argument,: second_argument" übergeben, aber es scheint ein bisschen ungeschickt zu sein, die Benutzer meiner wundervollen "custom_method" -Medaille zu bitten, sich selbst auf ihre Liste von Argumenten voranzustellen.
Also, die Frage ist, wie würde eine weisere Rails Person Werte für ein bestimmtes Objekt durch custom_method setzen, und sie dann woanders abrufen, wie fields_for?
Wie immer, irgendwelche Vorschläge geschätzt.
Ach - natürlich. Der .Extend verwirrte mich. Danke vielmals. – PlankTon