2015-07-22 4 views
1

В модели перед загрузкой файла .xls я хочу, чтобы иметь возможность проверять файлы excel, прежде чем они будут сохранены приложением. Я пытаюсь открыть сохраненный файл excel из объекта :file_url (столбец в таблице comits, где будут сохраняться файлы .xls), а затем проверить его, но я получаю ошибку no implicit conversion of Symbol into String.Проверка загруженного файла Excel перед сохранением с использованием Rails с Roo-xls gem

Валидация работает, когда я помещаю фактический путь к файлу excel, который был загружен и сохранен несущей, в Roo::Excel.new(""), но это побеждает цель моей проверки.

Как я могу захватить файл 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 

ответ

0

можно передать символ :file_url к Roo::Excel.new, он хочет путь к файлу. Попробуйте:

sheet = Roo::Excel.new(file_url) 
+0

Когда я сделал это изменение, это еще сказал мне, что не было неявное преобразование в строку. Когда я сделал file_url.to_s, он смог найти правильный путь, однако, я все еще получаю сообщение об ошибке ... но на этот раз, хотя он находит правильный путь, теперь он говорит, что файл не существует ... –

+0

Это сработало после изменения Roo :: Excell в Roo :: Spreadsheet и установки драгоценного камня roo-xls. =] Спасибо за помощь! –

+0

Ницца! Рад, что это сработало. Roo - отличный камень. –

0

Вы можете отправить временный файл в Его.
Допустим, вы отправляете файл params в :file:

Roo::Excel.open(params[:file].tempfile.to_path.to_s) 
0

Хорошо, я понял. Вместо Roo::Excell, она должна быть

sheet = Roo::Spreadsheet.open(self.file_url)

Кроме того, мне нужно, чтобы установить gem 'roo-xls' камень для того, чтобы прочитать электронную таблицу.

0

В моем случае следующий код работает нормально. (При условии, что вы установили необходимые драгоценные камни) В моем случае у меня есть файл .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 

 Смежные вопросы

  • Нет связанных вопросов^_^