Это будет высокий уровень, так как ваш вопрос довольно широкий. Это то, как я это делаю, но, вероятно, существуют десятки других способов.
Я использую гем под названием Roo (https://github.com/roo-rb/roo), который обеспечивает доступ для чтения для всех распространенных типов электронных таблиц. Затем вам потребуется метод в вашем posts_controller.rb для обработки ввода.
# POST /posts/import
def import
xlsx = Roo::Excelx.new(params[:file].tempfile.path)
xlsx.each do |row|
i += 1
next if i == 1 # skip header if necessary
post = Post.new(field1: row[0], field2: row[1]) # etc.
if post.valid?
post.save
imported += 1
else
errors << "Row #{i}: #{post.errors.messages} <br />"
end
end
render json: { success: "#{imported} cities imported.", errors: errors }
end
row
- это строка из вашей электронной таблицы, а столбцы представлены элементом массива row[0]
- это ячейка A текущий ряд и т. д.