Jak przenieść callback do modułu

Pomóżcie przenieść “before_destroy :set_ord” do modułu. Za chudy w cyckach jeszcze jestem.

[code=ruby]module OrderedModel
def up
self.class.update_all ‘ord = ord + 1’, “ord = #{self.ord-1}”
update_attribute :ord, self.ord-1
end

def down
self.class.update_all ‘ord = ord - 1’, “ord = #{self.ord+1}”
update_attribute :ord, self.ord+1
end

def set_ord
self.class.update_all ‘ord = ord - 1’, “ord > #{self.ord}”
end

end

class Gallery < ActiveRecord::Base
include OrderedModel
has_many :photos
before_destroy :set_ord
end[/code]

[code]module OrderedModel
module InstanceMethods
def set_ord
self.class.update_all ‘ord = ord - 1’, “ord > #{self.ord}”
end
end

def self.included(base)
base.send :include, InstanceMethods
base.before_destroy :set_ord
end
end

class Gallery < ActiveRecord::Base
include OrderedModel
has_many :photos
end[/code]

Kunsztownie, dzięki Paweł!

Jeśli używasz railsów 3, to możesz też skorzystać z http://apidock.com/rails/ActiveSupport/Concern

[code=‘ruby’]module OrderedModel
extend ActiveSupport::Concern

module InstanceMethods
def set_ord
self.class.update_all ‘ord = ord - 1’, “ord > #{self.ord}”
end
end

included do
before_destroy :set_ord
end
end

class Gallery < ActiveRecord::Base
include OrderedModel
has_many :photos
end[/code]

No właśnie używam. Skorzystam bo czytelniejsze i z automatu wciąga metody instancji/klasy. DZIĘKI!