Hi,
I’ve monkey patched ActiveRecord::Base in a way so that every model
class knows which attributes are “important”.
So in my model I can now do sth like this:
class User < ActiveRecord::Base
attribute_order :username, :password, :name, :mailaddress, :usergroup,
:created_at
acts_as_indexed :fields => self.sorted_attributes
end
The monkey-patch looks like this:
class ActiveRecord::Base
def self.attribute_order(*values)
@_sorted_attributes = []
values.collect do |v|
@_sorted_attributes.push(v)
end
end
def self.sorted_attributes
if defined? @_sorted_attributes
@_sorted_attributes
else
self.attribute_names.map do |a|
a.to_sym
end
end
end
end
Now I’d like to add the acts_as_indexed method to ALL my models by
adding it into the monkey-patch:
class ActiveRecord::Base
acts_as_indexed :fields => self.sorted_attributes
…
end
This doesn’t work as the sorted attributes don’t seem to exist when the
Class is Inheriting from ActiveRecord::Base, and the acts_as_indexed is
called too early. How could I delay the call of acts_as_indexed until
the class has been initialized? putting it into attribute_order doesn’t
help, because this method must not be called by every model.
Wolfgang