无法操作使用 Carrierwave gem 保存的文件

发布于 2025-01-04 17:20:15 字数 1570 浏览 3 评论 0原文

当我尝试使用 Carrierwave 操作存储在数据库中的文件时,我收到以下消息:

NoMethodError in DataFilesController#show
private method `gets' called for /files/test_file.csv:CsvFileUploader

这是错误起源的一些模型代码:

 def self.csv_import(file_wrapper, event_id)
    event = Event.find(event_id)
    file = file_wrapper.filename
    header = file.gets.strip

    keys = header.split(',')

    while (line = file.gets)
      params = {}
      values = line.strip.split(',')

      keys.each_with_index do |key,i|
        params[key] = values[i]
      end

      volunteer = event.volunteers.build(params)
      volunteer.save

    end
  end

这是我安装 Carrierwave 文件的模型:

class DataFile < ActiveRecord::Base
  attr_accessible :attachable_id, :attachable_type, :filename
  belongs_to :attachable, :polymorphic => true
  mount_uploader :filename, CsvFileUploader
end

这是控制器代码:

def create
    @event = Event.find(session[:stored_event_id].to_i)
    session[:stored_event_id] = @event.id
    @file = @event.data_files.build(params[:data_file])

    respond_to do |format|
      if @file.save
        format.html { redirect_to data_files_path(@event_id)}
        format.json { render json: @file, status: :created, location: @file }
      else
        format.html { render action: "new" }
        format.json { render json: @file.errors, status: :unprocessable_entity }
      end
    end
  end

基本上,我有一个名为“事件”的模型,它与一个名为“数据文件”的模型具有多态关系。 DataFile 模型有一个名为“文件名”的属性,该属性安装了载波上传器。

谢谢

I am getting the following message when i try to manipulate a file that i have stored in the database using carrierwave:

NoMethodError in DataFilesController#show
private method `gets' called for /files/test_file.csv:CsvFileUploader

Here some model code where the error is originating:

 def self.csv_import(file_wrapper, event_id)
    event = Event.find(event_id)
    file = file_wrapper.filename
    header = file.gets.strip

    keys = header.split(',')

    while (line = file.gets)
      params = {}
      values = line.strip.split(',')

      keys.each_with_index do |key,i|
        params[key] = values[i]
      end

      volunteer = event.volunteers.build(params)
      volunteer.save

    end
  end

Here is my model where i mount the carrierwave file:

class DataFile < ActiveRecord::Base
  attr_accessible :attachable_id, :attachable_type, :filename
  belongs_to :attachable, :polymorphic => true
  mount_uploader :filename, CsvFileUploader
end

Here is the controller code:

def create
    @event = Event.find(session[:stored_event_id].to_i)
    session[:stored_event_id] = @event.id
    @file = @event.data_files.build(params[:data_file])

    respond_to do |format|
      if @file.save
        format.html { redirect_to data_files_path(@event_id)}
        format.json { render json: @file, status: :created, location: @file }
      else
        format.html { render action: "new" }
        format.json { render json: @file.errors, status: :unprocessable_entity }
      end
    end
  end

Basically I have a model called Events that has a polymorphic relationship with a model called DataFile. The DataFile model has a attribute called 'filename' that has carrierwave uploader mounted to it.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文