0

2つの同様の方法を使用する2つのモデルがあります。どちらも呼び出されgenerate、どちらもによって呼び出されbefore_saveます。それらを1つにリファクタリングしたい。どうやってやるの?

#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
4

1 に答える 1

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
于 2013-09-01T12:28:08.820 に答える