ruby – 使用seed.rb文件创建记录时出现CarrierWave :: FormNotMultipart错误

我有一个有图像列的模型.我正在使用CarrierWave上传图像(我正在关注此 rails cast来执行此操作.

现在,我想使用seed.rb文件创建一些认记录,但我未能为图像提供正确的parh / url.

所以,我在List item app / public / images /文件夹中有图像,这是seed.rb文件中的代码

gems = {

    test1: {

        name: 'test1',description: 'test1',image: '/public/images/test1.png',},test2: {

        name: 'test2',description: 'test2',image: '/public/images/test2.png'
}

gems.each do |user,data|

  gem = Demogem.new(data)

  unless Demogem.where(name: gem.name).exists?
    gem.save!
  end
end

当我运行rake db:seed命令时,我收到以下错误

CarrierWave::FormNotMultipart: You tried to assign a String or a
Pathname to an uploader,for security reasons,this is not allowed.

谁能告诉我们如何为图像提供正确的网址?

解决方法

假设您的Gem模型将图像字段作为Carrierwave上传器(即,您的Gem模型中有mount_uploader:image,ImageUploader或类似物),您可以将ruby File对象分配给图像属性,而不是字符串.像这样的东西:
gem = Demogem.new(data)
image_src = File.join(Rails.root,"/public/images/test2.png")
src_file = File.new(image_src)
gem.image = src_file
gem.save

在整个代码中,您可以更改种子数据(因此哈希中的图像属性设置为File.new(File.join(Rails.root,“/ public / images / test1.jpg”))或更改构建新记录的方式,因此认情况下它不使用图像:

gems.each do |user,data|
    gem = Demogem.new(data.reject { |k,v| k == "image" })
    gem.image = new File(File.join(Rails.root,data["image"]))

    unless Demogem.where(name: gem.name).exists?
        gem.save!
    end
end

CarrierWave wiki has some documentation on this,但它不是很广泛.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...