Alp*_*haB 6 ruby ruby-on-rails ruby-on-rails-3 carrierwave
我想在第二步用头像上传建立3步用户注册.所以我按照Ryan Bates的指南http://railscasts.com/episodes/217-multistep-forms.我正在使用CarrierWave gem来处理上传.但似乎我无法在用户会话中存储上传的文件信息(我得到无法转储文件错误).我在控制器中使用以下技术
if params[:user][:img_path]
@uploader = FirmImgUploader.new
@uploader.store!(params[:user][:img_path])
session[:img] = @uploader
params[:user].delete(:img_path)
end
Run Code Online (Sandbox Code Playgroud)
它确实有帮助.但是当我上传禁止的文件类型时,这一行上的所有内容都会崩溃
@uploader.store!(params[:user][:img_path])
Run Code Online (Sandbox Code Playgroud)
有这个错误
CarrierWave::IntegrityError in UsersController#create
You are not allowed to upload "docx" files, allowed types: ["jpg", "jpeg", "gif", "png"]
Run Code Online (Sandbox Code Playgroud)
而不是正常的表单验证错误.
我怎么解决这个问题 ?谢谢 !
事实上我解决了我的问题。这是使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |