CarrierWave::FormNotMultipart error when creating records using seed.rb file

carrierwave, ruby, ruby-on-rails, ruby-on-rails-4

Solution

Presuming that your `Gem` model has the `image` field as a Carrierwave uploader (that is, you've got `mount_uploader :image, ImageUploader` or similar in your `Gem` model), you can assign a ruby `File` object to your `image` attribute, not a string. Something like this:

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

In your overall code, you could either change your seed data (so your `image` property in your hash was set to `File.new(File.join(Rails.root, "/public/images/test1.jpg"))` or change the way you construct your new records so it doesn't use the `image` by default:

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

The CarrierWave wiki has some documentation on this, but it's not very extensive.

Problem

I have a model that has a `image` column. I am using `CarrierWave` to upload images (I am following this rails cast to do this. Now, I want to create some default records using `seed.rb` file but I have failed to provided correct parh/url to the images. So, I have images in List item `app/public/images/` folder and this is the code from the `seed.rb` file: ``` 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 ``` And I am getting the following error when I run `rake db:seed` command: CarrierWave::FormNotMultipart: You tried to assign a String or a Pathname to an uploader, for security reasons, this is not allowed. Could anyone tell how to provided correct `url` to the images?

Original source