0

私はこれらの非常によく似たクラスを持っています:

class DeliveryDocument < CommercialDocument
  # Relations
  belongs_to :biller, :class_name => 'Company'
  belongs_to :customer, :class_name => 'Company'
  belongs_to :customer_center, :class_name => 'Center'
  has_many :delivery_document_lines, :dependent => :destroy
  alias_attribute :lines, :delivery_document_lines
  # Some configuration
  accepts_nested_attributes_for :delivery_document_lines
  acts_as_freezable :only_dependencies => true,
    :has_many => [:delivery_document_lines],
    :belongs_to => [:biller, :customer, :customer_center]
  acts_as_clonable :has_many => [:delivery_document_lines]
  validates_each :lines do |record, attr, value|
    # ...
  end
end

と:

class InvoiceDocument < CommercialDocument
  self.
  # Relations
  belongs_to :biller, :class_name => 'Company'
  belongs_to :customer, :class_name => 'Company'
  belongs_to :customer_center, :class_name => 'Center'
  has_many :invoice_document_lines, :dependent => :destroy
  alias_attribute :lines, :invoice_document_lines
  # Some configuration
  accepts_nested_attributes_for :invoice_document_lines
  acts_as_freezable :only_dependencies => true,
    :has_many => [:invoice_document_lines],
    :belongs_to => [:biller, :customer, :customer_center]
  acts_as_clonable :has_many => [:invoice_document_lines]
  # Validations
  validates_each :lines do |record, attr, value|
    # ...
  end
end

親に抽出できる、貼り付けていないメソッドもいくつかあります。親のクラス名だけを知る必要があります。私がこれを行うとき:

class CommercialDocument < Document  # document inherits from AR::Base
  # ...
  has_many :"#{self.to_s.underscore}_lines", :dependent => :destroy
  # ...
  accepts_nested_attributes_for :"#{self.to_s.underscore}_lines"
  # ...
end

self.to_sですので、動作しませんCommercialDocument

親クラスでこの動作をどのようにリファクタリングしますか? モジュールに入れてインポ​​ートすることはできますが、ドキュメントの階層全体がほとんど役に立たなくなります。ドキュメントの階層はもう持っているので、できれば使い道があれば使いたいです。

4

1 に答える 1

0

Class.inheritedを使用してみることができます

于 2011-05-31T20:39:08.017 に答える