実用的なアプローチとして、私はさまざまなレポートレコードを持つレポートモデルを用意しています。 "require 'csv'"はapplication.rbに設定されています。CSVエクスポート失敗
schema.rb:
create_table "reports", force: :cascade do |t|
t.date "start"
t.date "end"
t.string "brand"
t.string "team"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
レポートモデルは、CSVのを生成するための一般的な回避策として機能します。私report.rbで、私は次のことを持っている:
def self.to_csv
CSV.generate(headers: true) do |csv|
csv << ["Order ID", "User ID", "User name" "Sale price"]
Order.where("created_at between (?) and (?)", @report.start, @report.end).each do |order|
order.sales.each do |sale|
csv << [order.id, order.user_id, order.user_name, sale.price]
end
end
end
end
@report.start
と@report.end
が作成されたレコードによって定義されます。
これは実際にはうまくいくはずです。私がインデックス用にやっていて、ビューを表示していないときはそうです。
これはレポートコントローラです:私が得るすべてがある
<%= link_to report_path(@report, format: "csv"), class: "btn btn-default" do %> #report_path(params[:id], format: "csv") doesn't work either
Export
<% end %>
:ReportsController#で
NoMethodError
def show @report = Report.find(params[:id]) respond_to do |format| format.html format.csv { send_data @report.to_csv, filename: "report-#{Date.today}.csv"} end end
と、これは私のビューであります表示
未定義のメソッド#Reportため `to_csv」:0x007fc86baa2360
と私のコントローラ取得者からこの行が強調表示:
format.csv { send_data @report.to_csv, filename: "report-#{Date.today}.csv"}
すべてのヘルプははるかに高く評価されます!