7

2ステップでアバターをアップロードして、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

それは実際に役立ちます。しかし、禁止されたファイルタイプをアップロードすると、この行ですべてがクラッシュします

@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"]

通常のフォーム検証エラーの代わりに。

どうすればこの問題を解決できますか? ありがとう !

4

2 に答える 2

3

実際、私は自分の問題を解決しました。これは、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
于 2012-04-28T20:15:26.730 に答える