使用Roo-xls gem保存Rails之前validation上传的Excel文件
在模型中,在上传.xls
文件之前,我希望能够在应用程序保存excel文件之前对其进行validation。 我试图从:file_url
对象(comits表中列的.xls
文件将被保存)中打开要保存的excel文件,然后validation它,但我得到一个no implicit conversion of Symbol into String
错误。
validation的工作,当我把一个excel文件的已经上传和保存到Roo::Excel.new("")
的实际文件path,但是这打败了我的validation的目的。
我怎样才能抓住Excel文件没有被存储在应用程序?
我感谢帮助! 我希望不是太混乱。
这是我的comit.rb
class Comit < ActiveRecord::Base belongs_to :user mount_uploader :file_url, ComitUploader, mount_on: :file_url validates :filename, :file_url, presence: true validates_format_of :file_url, with: /.xls/, message: "Wrong file format" before_save :validate_excel def validate_excel sheet = Roo::Excel.new(:file_url) errors = [] header = sheet.row(1) num_of_columns = sheet.last_column errors << 'Need headers' unless errors << 'Need more columns' if num_of_columns < 21 errors end end
您将符号:file_url
传递给Roo::Excel.new
,它需要一个文件path。 尝试:
sheet = Roo::Excel.new(file_url)
你可以发送临时文件给Roo 。
假设您将文件发送给params
:file
:
Roo::Excel.open(params[:file].tempfile.to_path.to_s)
好吧,我明白了。 而不是Roo::Excell
,它需要
sheet = Roo::Spreadsheet.open(self.file_url)
在我的情况下,以下代码工作正常。 (假设你已经安装了所需的gem) 在我的情况下,我的根目录中有.xls文件
require 'roo' require 'roo-xls' class ExcelReader def read_file() sheet = Roo::Spreadsheet.open('Test.xls') sheet.each do |row| puts row end end obj=ExcelReader.new() obj.read_file() end