0

私の好みに似ているように見えるアクティブレコードクラスがたくさんあります!

基本クラスを拡張してメソッドを DRY することはできますか?それとも Rails を混乱させるのでしょうか?

多分私はいくつかのものを共有できますが、他のものは共有できませんか?

そうでない場合 - 続行する最善の方法は何ですか?

どうもありがとう ;)

class Stage < ActiveRecord::Base
  acts_as_taggable
  has_many :services, :as => :serviceable
  belongs_to :event
  belongs_to :user

  after_save :tag!

  def t(s)
    self.tag_list.add s
    self.event.tag_list.add s
  end

  # injected to after_save -> http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
  def tag!
    s = self

      if s.id > 0 then s.t "id-greater-than-0" end
      if s.id > 0 then s.t "some-stage-specific-stuff" end

    self.tag_list    
  end
end



class Sound < ActiveRecord::Base
  acts_as_taggable
  has_many :services, :as => :serviceable
  belongs_to :event
  belongs_to :user

  after_save :tag!

  def t(s)
    self.tag_list.add s
    self.event.tag_list.add s
  end

  # injected to after_save -> http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
  def tag!
    s = self

      if s.id > 0 then s.t "some-sound-specific-stuff" end

    self.tag_list    
  end
end
4

1 に答える 1

3

この問題には、単一テーブル継承を使用できます。基本的に2つの別々のモデルがありますが、それらは同じテーブルに保存されます。それに加えて、共通の機能を親クラスに抽出し、子クラスの詳細を残すことができます。STIの詳細については、http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritanceをご覧ください。

于 2012-01-31T12:19:34.337 に答える