复制包含carrierwave头像的记录:获取“无法将nil转换为整数”错误

时间:2016-08-28 15:43:15

标签: ruby-on-rails image carrierwave

协议has_many图片。

我正在使用本地存储空间。

在控制器中,我将@protocol复制到@ dest并使用:

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

该行:

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

引发此错误:
“无法将nil转换为整数”

Shell会话如下所示:

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

我做错了什么?我的目标是复制记录并复制相关的图像文件。我可以存储重复项。

1 个答案:

答案 0 :(得分:0)

这有效:

  @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

但我宁愿不必手动复制其他列,例如'description'当我使用tmp = i.dup时,不确定它为什么会失败。