- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经苦苦挣扎了大约 5 个小时,试图理解为什么 Shrine 会阻止我的上传。我要么在强参数中收到诸如“神殿:无效文件”之类的错误,要么收到“预期数组但得到字符串”之类的错误。如果没有错误,则图像实际上并未保存。
require "image_processing/mini_magick"
class ImageUploader < Shrine
include ImageProcessing::MiniMagick
plugin :activerecord
plugin :backgrounding
plugin :cached_attachment_data
plugin :determine_mime_type
plugin :delete_raw
plugin :direct_upload
plugin :logging, logger: Rails.logger
plugin :processing
plugin :remove_attachment
plugin :store_dimensions
plugin :validation_helpers
plugin :versions
Attacher.validate do
validate_max_size 2.megabytes, message: 'is too large (max is 2 MB)'
validate_mime_type_inclusion ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
end
def process(io, context)
case context[:phase]
when :store
thumb = resize_to_limit!(io.download, 200, 200)
{ original: io, thumb: thumb }
end
end
end
class Image < ActiveRecord::Base
include ImageUploader[:image]
belongs_to :imageable, polymorphic: true
end
class Product < ApplicationRecord
has_many :images, as: :imageable, dependent: :destroy
accepts_nested_attributes_for :images, allow_destroy: true
...
# Strong Params:
def product_params
params.require(:product).permit(
:name, :brand_id, :category_id, :price, :compare_price, :description,
images_attributes: { image: [] },
product_properties_attributes: [:id, :property_id, :value]
)
...
我的观点:
<%= f.fields_for :images do |image_form| %>
<%= image_form.file_field :image, multiple: true %>
<% end %>
根据我在文档或 gorails 上阅读的所有内容,这应该可行。我是否需要重组 images_attributes
散列?我也尝试过使用 direct_uploads,但很难让 presigned_url 与 S3 一起工作。
Refile 使这变得非常简单,所以我可能会哭着回到那个地方。
我明显做错了什么吗?
最佳答案
根据fields_for
documentation ,将为 project.images
集合中的每个图像调用提供的 block 。因此,如果您的产品当前没有任何图像,则不会调用该 block (根据文档)。
要使嵌套属性起作用,您需要在创建产品时转发以下参数:
product[images_attributes][0][image] = <file object or data hash>
product[images_attributes][1][image] = <file object or data hash>
product[images_attributes][2][image] = <file object or data hash>
...
如果您查看“Multiple Files”神社指南,建议您只有一个接受多个文件的文件字段:
<input type="file" name="file" multiple>
然后使用 Uppy 为该字段设置直接上传,为每个填充有上传文件数据哈希的上传文件动态生成 image
字段:
<input type="hidden" name="product[images_attributes][0][image]" value='{"id":"...","storage":"cache","metadata":{...}}'>
<input type="hidden" name="product[images_attributes][1][image]" value='{"id":"...","storage":"cache","metadata":{...}}'>
....
或者你可以让用户附加多个文件,这些文件都提交给应用程序,然后在 Controller 中解构它们:
class ProductsController < ApplicationController
def create
images_attributes = params["files"].map { |file| {image: file} }
Product.create(product_params.merge(images_attributes: images_attributes))
end
end
在这种情况下,您必须确保您的 HTML 表单设置了 enctype="multipart/form-data"
属性(否则只会提交文件的文件名,而不是文件本身)。
关于image-uploading - Shrine with Rails 多个多态图像上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830497/
我已经设置了使用 Shrine 直接上传到 S3。这很好用。其中,我启用了以下插件: Shrine.plugin :backgrounding Shrine.plugin :store_dimensi
我在 Ruby on Rails 应用程序中使用 Shrine 来创建调整大小和将图像上传到存储的过程。 我当前的代码是: image_uploader.rb require "image_proce
我已经苦苦挣扎了大约 5 个小时,试图理解为什么 Shrine 会阻止我的上传。我要么在强参数中收到诸如“神殿:无效文件”之类的错误,要么收到“预期数组但得到字符串”之类的错误。如果没有错误,则图像实
我无法使用 Shrine 播种图像,与 Carrierwave 不同,下面的代码不起作用。 Profile.create! id: 2, user_id: 2,
我还有一些可以对图像执行的其他任务。比如选择多张图片,然后将它们组合成一张图片。我有使用 RMagick 和本地文件的那部分,我有使用 Shrine 的上传部分,但我需要将两者连接起来。上传图像后(理
我还有一些可以对图像执行的其他任务。比如选择多张图片,然后将它们组合成一张图片。我有使用 RMagick 和本地文件的那部分,我有使用 Shrine 的上传部分,但我需要将两者连接起来。上传图像后(理
我正在尝试使用多态关联和 Shrine 实现多个文件上传。 class Campaign :signature add_metadata(:md5) { |io| calculate_signa
显然 :remove_attachment插件在检查和提交方面起到了作用,但如何从 Controller 调用该方法? 最佳答案 所有允许您设置表单字段的插件( remove_attachment 、
我正在使用 shrine用于通过 Ruby on Rails 在 S3 中存储图像的 gem。 我怎样才能让 shrine 表现如下? 1. When uploading files from Fro
我正在使用 shrine用于通过 Ruby on Rails 在 S3 中存储图像的 gem。 我怎样才能让 shrine 表现如下? 1. When uploading files from Fro
我使用带有 Shrine gem 的 Rails 5.2 来上传图片。在客户端,我使用 NativeScript 6.0 和 Angular 8.0。 我已经安装了 Shrine,它在 Rails 端
我设法使用 shrine 将文件上传到 s3,但我试图根据它所属的相册将每张照片上传到不同的文件夹。 假设我有一个名为:abc 的存储桶: 上传图片到相册:family应该上传图片到:abc/fami
Shrine 是否支持在 S3 存储桶内的文件夹之间复制/移动文件的方法? 例如,我将一个文件上传到一个名为 cache 的文件夹中,如果一切正常,我将该文件移动到一个 store 文件夹中并清除缓存
代码: image_upload.js function uploadAttachment(attachment) { var file = attachment.file; var form
以下代码使用 RSpec 3.5 和 Shrine gem 在 Rails 4.2 应用程序的模型规范内测试图像验证。用于文件上传。 我的问题是: 您能想出改进以下测试的方法或更好的方法来测试这些验证
我在尝试允许使用 Shrine 上传头像时遇到了一些问题。我正在使用 Rails 5。我不断收到错误消息,“nil:NilClass 的未定义方法‘cached_image_data’”。 我试过多次
我是一名优秀的程序员,十分优秀!