【发布时间】:2016-04-20 19:42:37
【问题描述】:
目前我有一个模型 A (ItemRequest),它有很多图像。 一旦这个项目请求被批准,它就会创建一个模型 B(项目),它也有许多图像。
我正在使用回形针处理图像上传到 S3,我想要的是在批准过程完成后,将图像从模型 A 复制到模型 B,复制它们。
以下一些类似的问题(但没有使用具有许多图像的模型)我在我的 ItemRequest 模型批准方法中编写了以下内容。
if images.length > 0
item.images = images.map { |img| img.dup }
end
这显然会创建一组新的图像模型,但是当尝试访问 url 时,它不会打开任何图像并且 S3 返回 403。 我已经检查过,在 S3 中没有创建图像。我可以访问其他图像,以便正确配置 S3。 关于如何解决这个问题的任何想法?
def resolve! user_id
if status != RESOLVED
ActiveRecord::Base.transaction do
self.resolved_by_id = user_id
self.resolved_date = DateTime.now
self.status = RESOLVED
save!
catalog_item = Item.create(
name: item_name,
oem_name: oem_name,
description: description,
category_id: category_id,
make: make,
part_number: part_number,
uom: uom,
cost_in_cents: cost_in_cents,
weight_in_grams: weight_in_grams
)
if images.length > 0
catalog_item.images = images.map { |img| img.dup }
catalog_item.save
end
end
end
true
end
值得一提的是,我的 Image 模型是多态的。
我已经写了一个解决方案,但还不满意。
将此添加到图像模型中
def file_remote_url=(url_value)
self.file = URI.parse url_value
@file_remote_url = url_value
end
然后
catalog_item.images = images.map { |img|
new_image = Image.new()
new_image.file_remote_url = img.url
new_image
}
catalog_item.save
此外,如果上传到开发机器,此解决方案在本地不起作用。
【问题讨论】:
-
可能只是缺少项目或图像的
save。你能展示整个动作吗? -
已更新并尝试显式调用保存。仍然是同样的问题,图像模型被创建并添加到数据库中,但图像 url 采用不存在的路径
-
catalog_item.images << images.map { |img| img.dup }试试这个 -
还是同样的问题。网址已更改,但图片并未真正复制到其他任何地方
标签: ruby-on-rails image amazon-s3 paperclip