Если вы делаете это очень часто, вы можете сделать что-то вроде этого:
class Model < ActiveRecord::Base
def self.define_with_save(method_name)
define_method "#{method_name}!" do
send method_name
save
end
end
def save # stub method for test purpose
puts 'saving...'
end
def do_stuff
puts 'doing stuff...'
end
define_with_save :do_stuff
end
m = Model.new
m.do_stuff
# => 'doing stuff...'
m.do_stuff!
# => 'doing stuff...'
# => 'saving...'
Если вы хотите, чтобы в нескольких моделях вы могли создать собственный базовый класс для них, содержащий этот метод класса define_with_save
, или вы можете добавить его в ActiveRecord::Base
, если он вам действительно нужен.
Кстати, я надеюсь, что вы на самом деле не называете свои методы в записи SomeCodeThatDoesSomeCalculations
, так как они обычно называются как some_code_that_does_some_calculations
.