Ruby on rails 在请求时难以获取要加载的CSV报告
我正在努力使从网页上查看报告成为可能,我正在努力。此任务使用Sidekiq 当我点击应该带我去那里的链接时,我得到了一个错误:“在Ruby on rails 在请求时难以获取要加载的CSV报告,ruby-on-rails,ruby,csv,sidekiq,Ruby On Rails,Ruby,Csv,Sidekiq,我正在努力使从网页上查看报告成为可能,我正在努力。此任务使用Sidekiq 当我点击应该带我去那里的链接时,我得到了一个错误:“在Admin::ReportsController中找不到操作'crumer\u risk\u report'” 在show.html.erb文件的Reports视图中,我在许多类似的行下面添加了,这些行带有指向其他报告的链接 我已在我的Routes文件的正确位置添加了获取“客户流失风险报告” 在我的Workers目录中,我相信这是我的系统版本的脚本目录,用于Sidek
Admin::ReportsController
中找不到操作'crumer\u risk\u report'
”
在show.html.erb文件的Reports视图中,我在许多类似的行下面添加了
,这些行带有指向其他报告的链接
我已在我的Routes文件的正确位置添加了获取“客户流失风险报告”
在我的Workers目录中,我相信这是我的系统版本的脚本目录,用于Sidekiq作业,我有一个名为chorn\u risk\u report.rb的文件,在这个文件中我有以下代码:
class ChurnRiskReport
include Sidekiq::Worker
def perform
csv_temp = Tempfile.new
puts csv_temp.path
CSV.open(csv_temp.path, 'wb') do |csv|
csv << ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"]
AccountChurnRisk.all.each do |acr|
report_data = [acr.aaa,
acr.bbb,
"#{acr.ccc} #{acr.ccc}",
acr.ddd,
acr.eee,
acr.fff]
csv << report_data
end
end
report_name = "churn_risk_report"
file_name = "gggggggggg-#{report_name}-#{DateTime.now.to_date.strftime("%b-%Y")}.csv".downcase
bucket_name = 'hhh-reports'
s3 = AWS::S3.new
key = "reports/churn_reports/" + File.basename(file_name)
x = s3.buckets[bucket_name].objects[key].write(:file => csv_temp.path)
end
end
class报告
包括Sidekiq::Worker
def执行
csv_temp=Tempfile.new
放置csv_临时路径
CSV.open(CSV_temp.path,'wb')do | CSV|
csv在这个答案的底部,是我专门为大多数不需要高性能的情况下的基本csv导出逻辑处理工作保留的要点。通常,我使用它作为用户下载当前正在查看的数据的CSV副本的一种方式(因此S3中的缓存并不太实用):
根据报表的大小,在S3中保存报表可能会过多,但可以作为缓存报表(或长期存储报表)的一种方式。在这种情况下,在呈现下载链接(到S3文件本身)之前,检查报告是否已经存在,如果已经存在,则直接呈现到AWS的链接,如果没有,则呈现“生成报告”链接,然后在生成报告后,呈现“下载报告”链接
如果您可以自动生成报告就更好了,这似乎是您在原始代码中所做的。虽然我认为“生成报告”按钮可以将作业排队以运行您拥有的代码,但报告很可能是每月一次的,这样您就可以确切地知道何时需要创建它们,在这种情况下,可能不需要“生成报告”按钮,如果报告已经生成,您可以只提供一个S3下载链接
要点内容:
# Good solution for exporting to CSV in rails.
# Source: https://www.codementor.io/victorhazbun/export-records-to-csv-files-ruby-on-rails-vda8323q0
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html
format.csv { send_data @users.to_csv, filename: "users-#{Date.today}.csv" }
end
end
end
class User < ActiveRecord::Base
def self.to_csv
attributes = %w{id email name}
CSV.generate(headers: true) do |csv|
csv << attributes
all.each do |user|
csv << attributes.map{ |attr| user.send(attr) }
end
end
end
end
<%= link_to 'Export CSV', user_path(format: :csv) %>
#在rails中导出为CSV的良好解决方案。
#资料来源:https://www.codementor.io/victorhazbun/export-records-to-csv-files-ruby-on-rails-vda8323q0
类UsersController 从错误消息中,问题与控制器/路由有关。你能给我看看它们的相关部分吗?你好。是的,它们如下。在routes.rb文件中,我有:resource:reports,只有:[:show]do。。。获取“客户流失风险报告”。。。结束
在控制器文件中,我有:``def搅动风险报告`。。。(没有足够的空间将其全部写入。原始问题中“include Sidekiq::Worker”下方和第三个“end”上方的所有内容)。。。如果我误解了你的评论,请告诉我,这些不是你所说的代码。再次感谢:)那么,您能否验证类Admin::reportscoontroller
是否确实有chorn\u risk\u report
方法?顺便说一下,你可以编辑你的问题来添加代码。。。不需要在评论中加入它……谢谢你,我不知道。可以肯定的是,Admin::reportscoontroller
表示我的Admin目录中的report\u controller.rb文件,不是吗?如果是,那么它确实有一个客户流失风险报告方法。不仅仅是文件名。您也必须这样定义类。