2016-07-18 9 views
0

実用的なアプローチとして、私はさまざまなレポートレコードを持つレポートモデルを用意しています。 "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"} 

すべてのヘルプははるかに高く評価されます!

答えて

0

".to_csv"の代わりに ".as_csv"に切り替えました。私report.rbモデルでは、私はレポートIDとコントローラに形式上を通過してきた私の見解で

...、@report.startdef as_csv ... endに切り替えてself.startを使用し、self.end、...というように代わりに:将来的に誰かを助け

<%= link_to report_path(@report.id, format: "csv") do %> ... <% end %>

願っています!

関連する問題