2012-03-06 91 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的新上传器。这实际上是工作。所以我想可能会有一个命名冲突,因为我称之为模型上传。但这只是一个猜测...

相关问题