作为务实的方法,我有一个具有不同报告记录的报告模型。 "要求' csv'"在application.rb。
中设置schema.rb:
numberOfItemsInSection
报告模型将作为生成CSV的通用解决方法。在我的 report.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
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
这是在我的观看次数:
中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
我得到的只是:
ReportsController#show中的NoMethodError
未定义的方法`to_csv&#39; #Report:0x007fc86baa2360
来自我的控制器的这一行得到了突出显示:
<%= link_to report_path(@report, format: "csv"), class: "btn btn-default" do %> #report_path(params[:id], format: "csv") doesn't work either Export <% end %>
非常感谢任何帮助!
答案 0 :(得分:0)
知道了。切换到&#34; .as_csv&#34;,而不是&#34; .to_csv&#34;。在我的report.rb模型中,我切换到def as_csv ... end
并使用self.start
,self.end
,...等等而不是@report.start
,...
在我的观看中,我已将报告ID和格式传递给控制器:
<%= link_to report_path(@report.id, format: "csv") do %> ... <% end %>
希望将来帮助某人!