加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 控制器对延迟作业的操作

发布时间:2020-12-17 04:21:40 所属栏目:百科 来源:网络整理
导读:我正在上传制表符分隔的文档并在控制器中处理.一切正常,但可能需要一些时间在一个大文件上.我想把它移到delay_job,我在我的应用程序的其他地方工作,但由于这是在控制器中,不能以相同的方式调用. 表单调用process_file操作,该操作又调用salesupload操作.我应
我正在上传制表符分隔的文档并在控制器中处理.一切正常,但可能需要一些时间在一个大文件上.我想把它移到delay_job,我在我的应用程序的其他地方工作,但由于这是在控制器中,不能以相同的方式调用.

表单调用process_file操作,该操作又调用salesupload操作.我应该如何将其转变为后台工作?

class SalesController < ApplicationController

  def salesupload(file)
    uploaded_io = file.read
    numrows = "uploaded_io.size"
    FasterCSV.parse(uploaded_io,{:headers => true,:col_sep =>"t"}).each do |row_data|
        full,upc,_discard,isrc = row_data[26].match(/^([^_]+)(_(.+))?/).to_a
          new_record = AppleSale.new(
              'provider' =>  row_data[0],'provider_country' => row_data[1],'vendor_identifier' => row_data[2]
          )
      new_record.save
    end
  end

    def process_file
        file = params[:apple_sale][:tsv_file]
        salesupload(file)
    end

end

解决方法

我发现当我必须这样做时,控制器中定义的方法必须是类方法.我不记得为什么会这样,我认为这与拥有更明确的接收器有关.所以我要做的是使salesupload方法成为一个类方法,然后只需调用.delay.
def self.salesupload(files)
  # code
end

def process_file
  file = params[:apple_sale][:tsv_file]
  SalesController.delay.salesupload(file)
  head :no_content
end

你应该好好去!我还通过AJAX调用了我的原始方法(在本例中为process_file),然后我添加了头部:no_content,以便它返回一些东西而不需要重定向或任何东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读