2014-04-01 32 views
0

CarrierWave工作正常,直到我不得不對我的表更改字段名(其中CarrierWave被安裝到現場),現在當我嘗試上傳文件,我得到:錯誤上載的文件上傳波

**ActiveRecord::StatementInvalid in PhotosController#create** 
**TypeError: can't cast ActionDispatch::Http::UploadedFile to string: INSERT INTO "photos" ("album_id", "created_at", "rel", "road", "updated_at") VALUES (?, ?, ?, ?, ?)** 

我的代碼:

Photo.rb

class Photo < ActiveRecord::Base 
    belongs_to :album 

    attr_accessible :legend, :road, :rel 

    mount_uploader :road, UpperUploader 
end 

的上傳

class UpperUploader < CarrierWave::Uploader::Base 
    storage :file 
    def store_dir 
    "../app/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.album_id}" 
end 

上PhotosController的創建操作

def new 
    @photo = Photo.new 
end 

def create 
    params[:photo][:road].each do |p| 
     photo = Photo.new 
     photo.road = p 
     photo.rel = p 
     photo.album_id = session[:current_album] 
     photo.save 
    end 

    render 'manage' 
end 

def photo_params 
     params.require(:photo).permit(:legend, :road, :album_id, :rel) 
end 

我_form部分用來上傳文件:

<%= form_for @photo , html: { multipart: true } do |f| %> 
    <% if @photo.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@photo.errors.count, "error") %> prohibited this photo from being saved:</h2> 

     <ul> 
     <% @photo.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :road %><br> 
    <%= f.file_field :road, :multiple => 'multiple' %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

我改變上傳列名(什麼是「道路「),通過遷移,當然,我試圖改變所有'路徑'的名字我的代碼是'道路'。我試圖關閉並打開服務器多次,錯誤仍然存​​在。

任何幫助?

PS:本

photo.rel = P

線導致錯誤。如果我評論它,一切正常。但爲什麼這條線導致這個問題呢?是的,我想要一個「rel」字段,它是「road」字段的完全副本,但CarrierWave並未「安裝」(並且收看)該字段。

回答

1

我想這是因爲你上傳安裝到road列。當你用下面的代碼說明:

mount_uploader :road, UpperUploader

但是,當你試圖將其分配給rel,它提出了一個錯誤TypeError (can't cast ActionDispatch ...,因爲rel這不就是上傳應安裝在列。

您可以在CarrierWave Documentation