你可以簡單地把它添加到您的線路,像這樣:
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