有关使用composed_of
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html
创建(Common)Deadline
类如何,
class Deadline
attr_reader :date, :status
def initialize(date, status)
@date, @status = date, status
end
# write common method
end
class GeneralDeadline < Deadline
attr_read :received_status
def initialize(date, status, received_status)
super(date, status)
@received_status = received_status
end
end
class FinancialDeadline < Deadline
def initialize(date, status, received_status)
super(date, status)
@amount = amount
end
# define method!
end
并定义composed_of
class GeneralContract
composed_of :deadline, class_name: 'GeneralDeadline', mapping: [%w(received_status received_status), %w(date date), %w(status status)]
end
class FinancialContract
composed_of :deadline, class_name: 'FinancialDeadline', mapping: [%w(amount amount), %w(date date), %w(status status)]
end
协会
听起来像你想看看['Single Table Inheritance'](http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html)。如果你愿意的话,我可以写出它,尽管它不会是直接的答案 –
有了STI,获得has_many的容易性:合同,然后是合同子类型的范围 - 以及将共享逻辑放入基类中很好..看到https://eewang.github.io/blog/2013/03/12/how-and-when-to-use-single-table-inheritance-in-rails/ – Tim
非常感谢,我要去请看看:) –