以下两种form都可以上载文件(http://guides.rails.info/form_helpers.html#what-gets-uploaded)
第一种
<%= form_tag({:action => :upload}, :multipart => true) do %>
<%= file_field_tag 'picture' %>
<% end %>
第二种
<%= form_for @person do |f| %>
<%= f.file_field :picture %>
<% end %>
controller中
def upload
uploaded_io = params[:person][:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
file.write(uploaded_io.read)
end
end
实例:
涉及到xls读入并创建记录
view中
<%= form_for(@part, :url => {:action => "upload"}) do |f| %>
<%= f.file_field :xls_file%>
<%= f.submit %>
<% end %
controller中
def upload
begin
if params[:part][:xls_file]
uploaded_io = params[:part][:xls_file]
workbook = Spreadsheet.open(uploaded_io.tempfile)
sheet = workbook.worksheet 0
Part.transaction do
sheet.each do |row|
if row[0].is_a?(Float)
part = Part.create!(:name=>row[1], :project_id => params[:part][:project_id], :size=>row[3], :material=>row[4], :quantity=>row[5].to_i, :weight=>row[6], :description=>row[8])
end
end
redirect_to ......
end
else
raise Errno::error #在没有选择导入文件直接点击上载时抛出一个异常
end
rescue => err
logger.error(err)
redirect_to ......
end
end
对上述controller中的处理增加出错提示、方便使用者定位自己的导入文件的错误
def upload
part = Part.new
begin
if params[:part][:xls_file]
uploaded_io = params[:part][:xls_file]
workbook = Spreadsheet.open(uploaded_io.tempfile)
sheet = workbook.worksheet 0
error_location = 0 #记录出错位置
Part.transaction do
sheet.each do |row|
error_location += 1
if row[7].is_a?(Float)
chart = Chart.find_or_create_by_name(row[1])
category = Category.find_by_name(row[2])
part = Part.new(
:project_id => params[:part][:project_id],
:number => row[0],
:chart_id => chart.id,
:category_id => category.id,
:name => row[3],
:quantity => row[6].to_i,
:weight => row[7].to_f,
:description => row[9])
unless part.valid?
raise part.errors.full_messages
else
part.save
end
end
end
redirect_to parts_path(:project_id => params[:part][:project_id]), :notice => I18n.t("flash.parts.upload_success.notice")
end
else
raise "import empty!"
end
rescue => err
#将出错信息记录到log中
logger.error("#{error_location} row Error!")
logger.error(part.errors.full_messages)
logger.error(err)
#将错误信息显示到页面
if part.errors.blank?
error_message = "没有选择导入文件!"
else
error_message = "导入失败!第#{error_location}行出错:" + part.errors.full_messages.to_s
end
redirect_to :back, :notice => error_message
end
end
The Spreadsheet Library:http://spreadsheet.rubyforge.org/GUIDE_txt.html
分享到:
相关推荐
在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...
在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称的文件时,文件名可能会出现乱码。这个问题主要是由于字符编码不兼容导致的。Rails默认使用UTF-8编码,但文件系统或者某些外部...
Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...
在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...
在本篇博文中,我们将深入探讨如何在Rails中利用AJAX提交文件或图片。 首先,我们需要设置一个表单来允许用户上传文件。在Rails中,`form_for`辅助方法可以帮助我们创建一个表单,但为了支持AJAX提交,我们需要将其...
jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...
本篇文章将深入探讨Rails中的文件上传机制,并结合给定的“rails 文件上传”主题,提供关于如何在Rails应用中实现文件上传的详细知识。 1. **ActionDispatch::Http::UploadedFile**: 当用户通过表单上传文件时,...
在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在应用的升级过程中,处理文件上传的策略可能会有所变化。Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3...
这个简单的插件使您能够调用to_xls到Rails的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git => ...
在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...
Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip
安装在Gemfile中: gem 'rails-uploader'在航线上: mount Uploader :: Engine => '/uploader' 迁移ActiveRecord: $ bundle exec rails g uploader:install用法存储上传文件的架构(cancan集成): class Asset <...
rails_layout, 为各种前端框架生成 Rails 应用程序布局文件 RailsLayout gem使用这里 gem 可以设置你选择的前端框架的布局文件:Zurb基础 5.3Bootstrap 4.0Bootstrap 3.3它还将为 Bootstrap 或者基础设置设计视图。...
这可能涉及到阅读Rails应用的控制器、模型、视图和库文件,找出生成CHM的具体实现。同时,标签“工具”意味着可能涉及到了其他辅助工具,如文本处理、HTML转换或版本控制工具,它们可能在生成和管理CHM文档过程中...
在 Rails 应用中使用 Cucumber-Rails,开发者可以创建一个名为`features`的目录,里面包含这些Gherkin特性文件。每个特性文件描述了一个或多个业务场景,并使用关键字`Given`、`When`、`Then`等来定义步骤。这些步骤...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
在Ruby on Rails开发中,将Web程序打包成可执行文件是一项常见的需求,这可以使应用程序更加便携,方便在没有Rails环境的计算机上运行。这里,我们主要探讨如何将Rails应用转化为独立的可执行文件,结合提供的标题和...