【发布时间】:2020-09-17 16:24:26
【问题描述】:
我正在尝试使从网页上查看报告成为可能,但我很苦恼。此任务使用 Sidekiq。
当我单击应该将我带到那里的链接时,我收到错误消息:“找不到Admin::ReportsController 的操作'churn_risk_report'。”
在 show.html.erb 文件的“报告”视图中,我在多个类似行下方添加了<li><%= link_to 'Churn Risk Report', churn_risk_report_admin_reports_path %></li>,并带有指向其他报告的链接。
我已在我的 Routes 文件的正确位置添加了get 'churn_risk_report'。
在我的 Workers 目录中,我相信它是用于 Sidekiq 作业的系统版本的 Scripts 目录,我有一个名为 churn_risk_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
连续的字母 = 我认为应该保密的代码。当我运行这段代码时,它在 Rails 控制台中运行,所以我知道代码可以运行。
我正在努力完成任务的最后一部分。在 Reports 控制器中,我定义了 churn_risk_report 并复制了与 Worker 文件中相同的代码。我知道这是不正确的,但我不确定那里应该放什么。我认为这里应该有一些代码可以在 Workers 目录中临时创建一个churn_risk_report 文件,但情况可能并非如此。我也认为应该在某处涉及“异步”。
提前感谢您的帮助!
【问题讨论】:
-
从错误消息中,问题与控制器/路由有关。你能展示这些的相关部分吗?
-
你好。是的,它们如下。在 routes.rb 文件中我有:
resource :reports, only: [:show] do ... get 'churn_risk_report' ... end在控制器文件中我有:```def churn_risk_report ...(没有足够的空间来写它。一切都在“包括 Sidekiq::Worker”和上面原始问题中的第三个“结束”)...结束如果我误解了您的评论,请告诉我,这些不是您正在谈论的代码。再次感谢:) -
那么,你能验证类
Admin::ReportsController确实有一个churn_risk_report方法吗?顺便说一句,您可以编辑您的问题以添加代码......不需要将其放入评论中...... -
谢谢,我不知道。可以肯定的是,
Admin::ReportsController表示我的 Admin 目录中的 report_controller.rb 文件不是吗?如果是这样,那么是的,它确实有一个 churn_risk_report 方法。 -
不仅仅是文件名。你也必须这样定义类。
标签: ruby-on-rails ruby csv sidekiq