2013-09-01 1 views
0

У меня есть 2 модели, используя 2 похожих метода. Оба они называются generate, и оба вызываются before_save. Я хочу реорганизовать их в один. Как я могу это сделать?Как поместить эти 2 аналогичных метода в один модуль в моем приложении Rails?

#model1's generate 
before_save :generate 
def generate 
    self.slug = self.title.gsub(' ', '-').downcase 
end 

#model2‘s generate 
before_save :generate 
def generate 
    self.slug = self.name.gsub(' ', '-').downcase 
end 
+0

Используйте этот подход: http://api.rubyonrails.org/classes/ActiveSupport/Concern.html – tiktak

ответ

1

Использование ActiveSupport::Concern:

module Slugged 
    extend ActiveSupport::Concern 

    included do 
    before_save :generate 
    end 

    def slugged_attr 
    name 
    end 

    def generate 
    self.slug = self.slugged_attr.gsub(' ', '-').downcase 
    end 
end 

А затем включить его в свои модели.

include Slugged 

Добавить следующий метод в вашу первую модель. Он перепишет slugged_attr в беспокойстве:

def slugged_attr 
    title 
end 
+0

Спасибо за ответ, но в MODEL1 Сгенерируем, он должен быть 'самостоятельно .title' не 'self.name', как это решить? –

+0

Попробуйте использовать метод alias_attribute или name для model1. – tiktak

+0

Спасибо, что работает. –

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