Jan Roesner wrote:
Callbacks scheiden in meinem Falle aus, da ich keinen Callback
'after_read' oder 'after_find' finde, ich ausserdem hinterher aus dem
Model auch ein Plugin acts_as_foobar abstrahieren möchte, von dessen
Klassen neue Klassen wiederum erben (und somit auch meine angepasste
save und find).
Hallo Jan,

wie schon korrekt gesagt wurde, gibt es after_update und after_create. Es gibt auch ein after_find und after_initialize. Dubioserweise wird after_initialize auch nach find Aufrufen getriggert, aber after_find sollte dir weiterhelfen. Aus Performance Gründen muss man after_find direkt auf den model klassen definieren, im gegensatz zu den anderen callbacks. das bedeutet einfach, dass du

> def after_find
>  # code
> end

in deinem AR Model definieren musst.

Falls Du Attribut-weise arbeiten willst: da hatte ich es immer so gemacht dass ich read_attribute bzw write_attribute genutzt habe. etwa so:

class Test < AR::Base

 def read_attribute_with_cool_feature(attr_name)
   do.cool.stuff(attr_name)
   read_attribute_without_cool_feature(attr_name)
 end

 alias_method_chain :read_attribute, :cool_feature

end

Funktioniert auch wunderbar wenn man code im plugin style schreiben möchte.

Callbacks sind auf jeden fall ein besserer Ansatz als save/create/find zu überschreiben.

Du solltest auch anstatt mit Vererbung dann eher mit Modules oder gar Macro Methoden arbeiten, wenn Du das zu einem Plugin machen willst. Dazu siehst Du in den meisten guten Plugins guten Code den man sich abgucken kann, zB bei acts_as_versioned.

Gruß
Thomas
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an