Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 使用Carrierwave复制带有关联图像的记录_Ruby On Rails 3_Carrierwave_Dup - Fatal编程技术网

Ruby on rails 3 使用Carrierwave复制带有关联图像的记录

Ruby on rails 3 使用Carrierwave复制带有关联图像的记录,ruby-on-rails-3,carrierwave,dup,Ruby On Rails 3,Carrierwave,Dup,我有一个应用程序,你可以在其中存储订单/发票。我正在构建一个简单的功能,您可以为我的客户复制发票。我在Order.rb模型中编写了此方法,其中: 获取发票,复制关联的行项目,向其中添加新的OrderID…并对关联的图像执行相同的操作 def self.duplicate_it(invoice) new_invoice = invoice.dup new_invoice.save invoice.lineitems.each do |l| new_lineitem = l.d

我有一个应用程序,你可以在其中存储订单/发票。我正在构建一个简单的功能,您可以为我的客户复制发票。我在Order.rb模型中编写了此方法,其中:

获取发票,复制关联的行项目,向其中添加新的OrderID…并对关联的图像执行相同的操作

def self.duplicate_it(invoice)
  new_invoice = invoice.dup
  new_invoice.save

  invoice.lineitems.each do |l|
    new_lineitem = l.dup
    new_lineitem.order_id = new_invoice.id
    new_lineitem.save
  end

  invoice.images.each do |i|
    new_image = i.dup
    new_image.order_id = new_invoice.id
    new_image.save
  end

  return new_invoice
end
不幸的是,您不能只
.dup
图像,因为自从我在S3上存储图像以来,就有所有这些关联过期的东西。是否有一种方法可以使用图像的url重新生成图像

下面是我在运行时遇到的错误。这说明并非所有相关的图像信息都被正确复制

Showing /Users/bruceackerman/Dropbox/printavo/app/views/orders/_image-display.erb where line #3 raised:

undefined method `content_type' for nil:NilClass
Extracted source (around line #3):

1:  <% @order.images.each do |image| %>
2:      <% if image.image && image.image.file %>
3:          <% if image.image.file.content_type == "application/pdf" %>
4:              <%= link_to image_tag("/images/app/pdf.jpg", 
5:                      :class => 'invoice-image'),
6:                  image.image_url, 
Showing/Users/bruceackerman/Dropbox/printavo/app/views/orders/_image-display.erb,其中第3行出现:
nil:NilClass的未定义方法“content\u type”
提取的源(第3行附近):
1:  
2:      
三:
4:‘发票图像’,
6:image.image\u url,

我想你可以做以下几件事

invoice.images.each do |i|
  new_image = new_invoice.images.new({ order_id: new_invoice.id })
  new_image.image.download!(i.image_url)
  new_image.store_image!
  new_image.save!
end

这实际上是我为订单上的每个行项目所做的:

def self.duplicate_it(invoice)
    new_invoice = invoice.dup :include => {:lineitems => :images} do |original, kopy|
      kopy.image = original.image if kopy.is_a?(Image)
    end

    new_invoice.save!
    return new_invoice
end

虽然有点晚了,但这是我的解决方案。我在
方面遇到了太多问题。下载

if @record.duplicable?
      new_record = @record.dup
      if new_record.save
        @record.uploads.each do |upload|
          new_image = new_record.uploads.new({ uploadable_id: new_record.id })
          new_image.filename = Rails.root.join('public'+upload.filename_url).open
          new_image.save!
        end
end
这是我的
upload.rb

class Upload < ActiveRecord::Base
  belongs_to :uploadable, polymorphic: true
  mount_uploader :filename, ImageUploader
end
类上传

希望有帮助

你解决问题了吗?是的,请检查我下面的答案