Rails, помощник с "!" - PullRequest
       1

Rails, помощник с "!"

0 голосов
/ 03 декабря 2011

Я часто пишу вещи, которые выглядят так:

def AModel < ActiveRecord::Base
  belongs_to :user

  def SomeCodeThatDoesSomeCalculations
    # some code here
  end

  def SomeCodeThatDoesSomeCalculations!
    self.SomeCodeThatDoesSomeCalculations
    self.save
  end
end

Есть ли лучший способ генерировать функции с суффиксом "!"

1 Ответ

1 голос
/ 03 декабря 2011

Если вы делаете это очень часто, вы можете сделать что-то вроде этого:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...