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

前端之家收集整理的这篇文章主要介绍了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,但它不是很广泛.

猜你在找的Ruby相关文章