我有一个有多个型号的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
但是,在我的主要模型(称为患者)中,我需要包含来自其他一对多模型的字段(例如,home_address,其中包含街道,城市,州,邮政等)。这是否可以保留在患者模型中?我在我的控制器中设置了逻辑,可以添加其他模型的信息,但似乎让患者模型从其他模型中获取所需的所有其他信息并将其添加到导出行中会更加清晰。 / p>
答案 0 :(得分:0)
在我看来,大部分工作都应该在模型中完成。保持控制器薄,模型比较粗糙。
如果您需要访问某些属性 - 比如说Patient
与Address
有一对一的关系,那么请随意这样做!只需做类似数据的事情:
fields += HomeAddress.csv_header
home_address.rb
def self.csv_header
... pretty much the same thing as Patient.csv_header
end
因此,您不是保留患者模型中的数据,而是将数据保留在其所属的位置,并且能够访问它。