Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在请求时难以获取要加载的CSV报告_Ruby On Rails_Ruby_Csv_Sidekiq - Fatal编程技术网

Ruby on rails 在请求时难以获取要加载的CSV报告

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

我正在努力使从网页上查看报告成为可能,我正在努力。此任务使用Sidekiq

当我点击应该带我去那里的链接时,我得到了一个错误:“在
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文件,不是吗?如果是,那么它确实有一个客户流失风险报告方法。不仅仅是文件名。您也必须这样定义类。