2011-12-03 3 views
0

я часто пишу материал, который выглядит следующим образом:Рельсы, помощник с "!"

def AModel < ActiveRecord::Base 
    belongs_to :user 

    def SomeCodeThatDoesSomeCalculations 
    # some code here 
    end 

    def SomeCodeThatDoesSomeCalculations! 
    self.SomeCodeThatDoesSomeCalculations 
    self.save 
    end 
end 

Есть ли лучший способ для создания функции с суффиксом «!» ?

ответ

1

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

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.

Смежные вопросы