带有图片上传器的多步骤表单 [英] Multi step form with image uploader
问题描述
我要在第2步上使用头像上传来建立3步用户注册.因此,我遵循Ryan Bates的指南 http://railscasts.com/episodes/217-multistep-forms .我正在使用CarrierWave gem处理上传.但似乎我无法在用户会话中存储上载的文件信息(我无法转储文件错误).我在控制器中使用以下技术
I want to build 3 step user registration with avatar uploading on 2nd step. So i follow Ryan Bates's guide http://railscasts.com/episodes/217-multistep-forms . I'm using CarrierWave gem to handle uploads. But it seems like i can't store uploaded file info in user session (i'm getting can't dump File error). I use following technique in controller
if params[:user][:img_path]
@uploader = FirmImgUploader.new
@uploader.store!(params[:user][:img_path])
session[:img] = @uploader
params[:user].delete(:img_path)
end
实际上有帮助.但是,当我上传禁止的文件类型时,此行的所有操作都会崩溃
It actually helps. But when i upload forbidden file type everything's crashes on this line
@uploader.store!(params[:user][:img_path])
出现此错误
CarrierWave::IntegrityError in UsersController#create
You are not allowed to upload "docx" files, allowed types: ["jpg", "jpeg", "gif", "png"]
代替正常的表单验证错误.
instead of normal form validation error.
我该如何解决这个问题?谢谢!
How can i solve this problem ? Thanks !
推荐答案
实际上我已经解决了我的问题.这是使用载波上传文件的多步骤表单的工作代码
Actually I solved my problem. Here's working code for multistep forms with file uploading using carrierwave
if params[:user][:img_path]
@uploaded = params[:user][:img_path]
params[:user].delete(:img_path)
end
session[:user_data].deep_merge!(params[:user]) if params[:user]
@user = User.new(session[:user_data])
if @uploaded
# here how validation will work
@user.img_path = @uploaded
end
@user.current_stage = session[:register_stage]
if @user.valid?
if @user.last_stage?
@user.img_path = session[:img] if @user.last_stage?
@user.save
else
@user.next_stage
end
# now we can store carrierwave object in session
session[:img] = @user.img_path
session[:register_stage] = @user.current_stage
end
这篇关于带有图片上传器的多步骤表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!