我需要公开展示用户个人资料,用户可以在其中选择要显示的内容和不显示的内容。我的设计是:
class Report < ActiveRecord::Base
belongs_to :user_data
belongs_to :report_config
delegate :show_name, :show_address, :to => :report_config
delegate :name, :address, :to => :user_data
def filter_data
report = self.user_data
report.name = nil if show_name.false?
report.address = nil if show_address.false?
return report
end
end
class UserData < ActiveRecord::Base
has_many :report
end
class ReportConfig < ActiveRecord::Base
has_many :report
end
然而,这并不是一个很好的设计,因为调用filter_data
Report 对象会返回一个子对象。如何允许Report
具有子对象的所有属性?
我正在考虑继承(即,Report 继承了 UserData 和 ReportConfig,但它不起作用)。还有哪些其他设计模式可以解决我的问题?