After_find callback broken after upgrade to rails3

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!

The idea here is in Rails 3, within ActiveRecord::Base, you should not
define the method after_find such as:

def after_find
do_some_thing
end

Instead, you should do:

after_find :my_after_find_method

def my_after_find_method
do_some_thing
end

Somehow they failed to mention such a simple thing in the API Document.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs