Duplicating a record that contains a carrierwave avatar : Getting “can't convert nil into Integer” error

前提是你 提交于 2019-12-12 02:33:12

问题


Protocol has_many Images.

I am using local storage.

In a controller, I am copying @protocol to @ dest and I use:

  @protocol.images.each do |i|
    tmp=i.dup
    tmp.avatar = File.open(i.avatar.current_path)
    tmp.save!
    @dest.images << tmp        
  end

The line:

tmp.avatar = File.open(i.avatar.current_path)

Throws this error:
"can't convert nil into Integer"

Shell session looks like this:

>> i.avatar.current_path  
=>    "/Users/perry_mac/rails_projects/mymri/public/system/images/avatars/000/000/097/original/ruby.jpg"  
>> File.open(i.avatar.current_path)  
=> #  <File:/Users/perry_mac/rails_projects/mymri/public/system/images/avatars/000/000/097/original/ruby.jpg>  
>> tmp.avatar = File.open(i.avatar.current_path)  
!! #<TypeError: can't convert nil into Integer>  
>>  

What am I doing wrong? My goal is to duplicate the record and copy the associated image files. I am OK storing the duplicates.


回答1:


This works:

  @protocol.images.each do |i|
    tmp=Image.new
    tmp.avatar = File.open(i.avatar.current_path)
    tmp.description = i.description
    tmp.save
    @dest.images << tmp        
  end

But I'd rather not have to manually copy the other columns, like 'description' Not sure why it fails when I use tmp=i.dup .



来源:https://stackoverflow.com/questions/39192981/duplicating-a-record-that-contains-a-carrierwave-avatar-getting-cant-convert

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!