Carrierwave NoMethodError:nil的未定义方法`name':NilClass:

时间:2012-03-06 23:45:23

标签: ruby-on-rails carrierwave

这里已经存在类似的问题Rails + CarrierWave: NoMethodError: undefined method `name' for nil: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

在控制器中,他们像往常一样:

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时,一切正常。

这里有什么问题?

非常感谢!

2 个答案:

答案 0 :(得分:5)

我有完全相同的错误,解决方案是将上传器连接到我的模型中的现有字段。对于您的示例,修复将从

更改
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

如果在Upload模型中有data_file字段且没有upload字段(检查db / schema.rb文件会有帮助)。

答案 1 :(得分:0)

我找不到解决方案为什么上面的代码不起作用,但是我创建了一个名为DataFile的新模型和一个名为FileUploadUploader的新上传器。这实际上是有效的。所以我猜可能存在命名冲突,因为我调用了模型上传。但这真的只是猜测...