2012-03-06 34 views
3

Rails + CarrierWave: NoMethodError: undefined method `name' for nil:NilClass這裏已經有類似的問題,但是解決方法是修復拼寫錯誤。Carrierwave NoMethodError:未定義方法`name'爲零:NilClass:

我已經在同一個項目中使用Rails和Carrierwave,沒有任何問題。有一個簡單的AR模型:

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :upload, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

在控制器thers是照例:

def create 
    @upload = Upload.new(params[:upload]) 

    if @upload.save 
    redirect_to new_admin_upload_path, :notice => t("site.successfully_created_resource") 
    else 
    render :action => 'new' 
    end 
end 

直線前進。提交表單時發生以下錯誤:

ActiveRecord::StatementInvalid in Admin::UploadsController#create 

NoMethodError: undefined method `name' for nil:NilClass: INSERT INTO "uploads" ("caption",  
"created_at", "data_file", "title", "updated_at") VALUES (?, ?, ?, ?, ?) 

我看不到錯誤,並且不明白,其中的名稱來自哪裏。當在AR模型中離開mount_uploader:upload,DataFileUploader時,一切正常。

這裏有什麼問題?

非常感謝!

+0

請檢查該鏈接了: http://stackoverflow.com/questions/7464536/rails-carrierwave-nomethoderror-undefined-method-name-for-nilnilclass – 2012-03-07 16:39:47

+2

感謝 - 但實際上我已經指這篇文章,但它不提供解決方案.... – awenkhh 2012-03-09 18:16:09

回答

5

我有完全相同的錯誤,並且解決方案是在我的模型中將上傳器連接到現有的字段。對於你的榜樣修復將是,如果你在上傳模型DATA_FILE領域,沒有上傳字段(檢查你的db/schema.rb文件,以改變從

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :upload, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :data_file, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

會有幫助)。

+0

剛纔有同樣的問題,這完美解決它!謝謝。 – joshferrara 2012-08-23 14:38:52

0

我無法找到解決方案,爲什麼上面的代碼不起作用,但我創建了一個名爲DataFile的新模型和一個名爲FileUploadUploader的新上傳器。這實際上是工作。所以我想可能會有一個命名衝突,因爲我稱之爲模型上傳。但這只是一個猜測...

相關問題