Grettings!
In an app that was working flawlessly in Rails 2.3.8 i have the following class method:
def self.encode(*attr_names) encoder = Encoder.new(attr_names) before_save encoder after_save encoder after_find encoder define_method(:after_find) { } # defining here, since there's only alias in the Encoder class itself end
This method references the Encoder class. Here is it:
class Encoder include Encodings def initialize(attrs_to_manage) # We're passed a list of attributes that should be stored encoded in the database @attrs_to_manage = attrs_to_manage end def before_save(model) # Before saving or updating, encode the attributes to their original encoding @attrs_to_manage.each do |field| model[field] = to_orig_encod(model[field]) end end def after_save(model) # After saving, encode them back to utf8 @attrs_to_manage.each do |field| model[field] = to_utf8(model[field]) end end alias_method :after_find, :after_save # Do the same after finding an existing record end
Before the upgrade to rails3 all the callbacks (before_save, after_save, after_find) worked fine. After the upgrade *before_save* and *after_save* still work, but *after_find* does not and I get the following deprecation warning in my log:
DEPRECATION WARNING: Base#after_find has been deprecated, please use Base.after_find :method instead
I'm uncertain how to change my code in order to re-enable the functionality of the after_find callback. I tried a few simple alternations with no success and the rails API documentation on this callback is very limited and without examples of implementation.
Any help appreciated, thanks in advance!