как СУХИЕ полиморфные классы activerecord? - PullRequest
0 голосов
/ 31 января 2012

У меня есть куча классов activerecord, которые на мой взгляд выглядят похожими!

Могу ли я расширить базовый класс, чтобы СУХОТЬ методы, или это может сбить с толку 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

1 Ответ

3 голосов
/ 31 января 2012

Для этой проблемы вы можете использовать наследование одной таблицы. По сути, у вас будет две отдельные модели, но они будут сохранены в одной таблице. Наряду с этим вы можете извлечь общую функциональность в родительский класс и оставить детали для дочерних классов. Вы можете прочитать больше о ИППП здесь: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance

...