2013-09-01 25 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

感謝的答案,但在模型1的產生,應該是'自我.title不是'self.name',該如何解決? –

+0

嘗試對model1使用alias_attribute或name方法。 – tiktak

+0

謝謝,這是有效的。 –

相關問題