你可以简单地把它添加到您的线路,像这样:
def self.to_csv(orders)
wanted_columns = [:id, :shipname, :shipaddress, :shipcity, :shipstate, :shipzip]
CSV.generate do |csv|
csv << wanted_columns.insert(-1, :product_name)
orders.each do |order|
csv << order.attributes.values_at(*wanted_columns).insert(-1, order.product.name)
end
end
end
的insert
方法inserts the given values before the element with the given index.
负指数从数组末尾向后计数,其中-1是最后一个元素。它返回结果数组。
为了简化,在此情况下,这样的:
CSV.generate do |csv|
csv << [:id, :shipname, :shipaddress, :shipcity, :shipstate, :shipzip, :product_name]
end
相同的主要适用于由所产生的阵列:
order.attributes.values_at(*wanted_columns)
wanted_columns = [:id, :shipname, :shipaddress, :shipcity, :shipstate, :shipzip]
CSV.generate do |csv|
csv << wanted_columns.insert(-1, :product_name)
end
应该表现为完全一样的
如果这不起作用,请尝试简化示例,并在添加之前检查阵列的正确性到阵列。您可能还简化:
orders.each do |order|
csv << order.attributes.values_at(*wanted_columns).insert(-1, order.product.name)
end
到:
csv << orders.first.attributes.values_at(*wanted_columns).insert(-1, orders.first.product.name)
为了排除故障的目的...
如果你有模型'order'和第二模型之间的关联,然后使用畅通无阻这行'csv << order.product.name'。 – stackoverflowery 2014-08-29 04:54:26
如果您提供两种模型的定义,那么我们可以提供更准确的提示/解决方案。 – stackoverflowery 2014-08-29 04:56:33
我有这个协会。我更详细地更新了这篇文章。我会在哪里放置你提到的csv系列?我如何将它添加到orders.attributes行? – Moosa 2014-08-29 05:00:45