我有一个rails应用程序,它有几个模型。一个特定的模型是应用程序的"焦点",它定义了几个一对多和几个多对多关系。
我已经创建了将字段导出到CSV文件的逻辑,并且在模型中我定义了一些方法,有人向我展示了这些方法来促进这一点。下面是两个方法:
def self.csv_header
fields = attr_order.*.to_s & content_columns.*.name
fields -= %w{created_at updated_at created_on updated_on deleted_at}
fields.reject! { |f| never_show? f }
fields
end
def to_csv
self.class.csv_header.map { |h| send(h) }
end
但是,在我的主模型(称为patient)中,我需要包含来自其他一些一对多模型的字段(例如,home_address,它包含街道、城市、州、zip等)。这有可能保留在病人模型中吗?我已经在我的控制器中设置了逻辑,可以添加其他模型的信息,但似乎让患者模型从其他模型中获取所需的所有附加信息并将其添加到导出行中会更清晰。
在我看来,你的大部分工作应该在模型中完成。让控制器变瘦,模型变胖,而不是相反。
如果您需要访问一些属性—例如Patient
与Address
具有1对1的关系,那么请随意这样做!只需要做一些类似数据的事情比如:
fields += HomeAddress.csv_header
home_address.rb
def self.csv_header
... pretty much the same thing as Patient.csv_header
end
因此,您不是将数据保存在Patient模型中,而是将数据保存在它所属的位置并且能够访问它。