Ruby on rails 3 使用Carrierwave复制带有关联图像的记录
我有一个应用程序,你可以在其中存储订单/发票。我正在构建一个简单的功能,您可以为我的客户复制发票。我在Order.rb模型中编写了此方法,其中: 获取发票,复制关联的行项目,向其中添加新的OrderID…并对关联的图像执行相同的操作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
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
类上传
希望有帮助 你解决问题了吗?是的,请检查我下面的答案