Ruby on Rails4でアプリ開発しています。

今回、画像アップロード機能を実装するためcarriewaveを導入しました。

画像アップロードはブログ機能につけて、ブログ記事と画像(任意)で投稿できるようにしました。

投稿の際はnew→confirm→cretaeと遷移して確認画面を経由して投稿できるようにしました。

問題点
画像は任意で登録できるようにしたいのですが、画像をアップロードしない場合にエラーになってしまいます。

# エラーメッセージ
CarrierWave::InvalidParameter at /topics
invalid cache id

画像をアップロードする際は正常に動きます。

現在コードはこのように記述しています。

_form.html.erb

#省略
  <%= f.label :アップロード写真 %>
  <%= f.file_field :photo %>
  <%= f.hidden_field :photo_cache %>
#省略

confirm.html.erb

#省略
  <%= image_tag (@topic.photo.url) if @topic.photo.present? %>
  <%= hidden_field_tag :"cache[photo]", @topic.photo.cache_name %>
#省略

topics_controller

class TopicsController < ApplicationController

  def new
    if params[:back]
      @topic = Topic.new(topics_params)
    else
      @topic = Topic.new
    end
  end

  def create
    @topic = Topic.new(topics_params)
    @topic.photo.retrieve_from_cache! params[:cache][:photo]
    @topic.save!
    @topic.user_id = current_user.id

    respond_to do |format|
     if @topic.save
      format.html { redirect_to @topic, notice: '投稿しました!' }
      format.json { render :show, status: :created, location: @topic }
     else
      format.html { render :new }
      format.json { render json: @topic.errors, status: :unprocessable_entity }
     end
    end
  end


  def confirm
    @topic = Topic.new(topics_params)
    render :new if @topic.invalid?
  end

# 一部省略


  private
    def topics_params
      params.require(:topic).permit(:title, :content, :photo_cache, :photo, :tag_list)
    end

    def set_topic
      @topic = Topic.find(params[:id])
    end
end

どのように修正すればいいかご教授お願いします。

・追記
エラー時のログはこのようになっています。

Started POST "/topics" for ::1 at 2017-04-09 14:16:58 +0900
Processing by TopicsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"3YIrH2Y/s/011pnlah8L6LFvGGdDzUmIFhxw28WvHDHG04r8DLH4taSgS+WIhUPAFapQrDZP1YzWcGWQgXv95Q==", "topic"=>{"title"=>"hoge", "content"=>"hoge", "tag_list"=>"huga"}, "cache"=>{"photo"=>""}, "commit"=>"投稿する"}
User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 3]]
(0.2ms)  SELECT COUNT(*) FROM "notifications" WHERE "notifications"."user_id" = $1 AND "notifications"."read" = $2  [["user_id", 3], ["read", "f"]]
Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.5ms)

CarrierWave::InvalidParameter - invalid cache id:
 carrierwave (1.0.0) lib/carrierwave/uploader/cache.rb:193:in `cache_id='
 carrierwave (1.0.0) lib/carrierwave/uploader/cache.rb:158:in `block in retrieve_from_cache!'
 carrierwave (1.0.0) lib/carrierwave/uploader/callbacks.rb:15:in `with_callbacks'
 carrierwave (1.0.0) lib/carrierwave/uploader/cache.rb:157:in `retrieve_from_cache!'
 app/controllers/topics_controller.rb:31:in `create'
 actionpack (4.2.3) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
 ・・・
  # 省略