使用 Carrierwave (HTML5) 将多个文件一次上传到 Rails 应用程序

2023-11-27

我很接近...非常接近...我可以很好地上传单个文件...但是当我更改表单的类型时file_field to :multiple => true所以我可以一次上传多个图像,我上传的文件被包装在一个数组中......并且“accepts_nested_attributes_for”的“魔力”丢失了。

Edit:经过更多检查后,我想知道我是否需要费心accepts_nested_attributes_for?也许我应该有一个file_field, :multiple => true在我的画廊表单(而不是嵌套表单)中,然后在我的创建操作中创建新画廊,然后循环遍历中的每个元素params[:gallery][:photos_attributes]["0"][:image]手动数组,可以这么说,调用@gallery.photos.create对于每个元素。 ?!?看起来很麻烦……但这就是我能想到的。

希望对Rails有更多经验的人能够插话......

Params:

{"utf8"=>"✓", 
"authenticity_token"=>"9jXvIwcllct7UyUfo6cvhEucQf2u3SY50SuaCLtFO4c=", 
"gallery"=>{
  "name"=>"First Gallery", 
  "photos_attributes"=>{"0"=>{
    "image"=>[
      #<ActionDispatch::Http::UploadedFile:0x00000104b78978 
        @original_filename="first_test_image.jpg", 
        @content_type="image/jpeg", 
        @headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"first_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n", 
        @tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-vz78ee>>, 
      #<ActionDispatch::Http::UploadedFile:0x00000104b78950 
        @original_filename="second_test_image.jpg", 
        @content_type="image/jpeg", 
        @headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"second_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n", 
        @tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-1jzhhyg>>
      ]
    }
  }
}, "commit"=>"Save", "action"=>"create", "controller"=>"galleries"}



#app/models/gallery.rb 
class Gallery < ActiveRecord::Base 
  has_many :photos, :dependent => :destroy 
  accepts_nested_attributes_for :photos 
end 

#app/models/photo.rb 
class Photo < ActiveRecord::Base 
  belongs_to :gallery 
  mount_uploader :photo, PhotoUploader 
end 

#config/routes.rb
resources :galleries do
  resources :photo, :only => [:create, :destroy]
end

画廊控制器

  def new
    @gallery = Gallery.new
    @gallery.photos.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @gallery }
    end
  end

  ...

  def create
    @gallery = Gallery.new(params[:gallery])

    respond_to do |format|
      if @gallery.save
        format.html { redirect_to @gallery, notice: 'Gallery was successfully created.' }
        format.json { render json: @gallery, status: :created, location: @gallery }
      else
        format.html { render action: "new" }
        format.json { render json: @gallery.errors, status: :unprocessable_entity }
      end
    end
  end

您可以对 params 数组进行一些修改,例如:

aux = []
params[:gallery][:photos_attributes][:image].each do |f|
  aux << {:image => f}
end
params[:post][:photos_attributes] = aux

@gallery = Gallery.new(params[:gallery])

我有一个类似的问题,我知道这是一个丑陋的黑客,但它对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Carrierwave (HTML5) 将多个文件一次上传到 Rails 应用程序 的相关文章

  • 使整个网页着色

    How I can take any given webpage and make everything look tinted a certain color Basically if you take google and tint i
  • 如何在没有文本修饰的文本下方添加一行:下划线? [复制]

    这个问题在这里已经有答案了 我需要在文本下方添加一行 而不需要文本装饰 下划线 否则如何在文本和行之间创建自定义空间 我们所做的 您可以使用Border Bottom和一些Padding Bottom a border bottom 1px
  • 将外部脚本嵌入 Next.js 应用程序

    我一直在尝试将外部 JavaScript 源嵌入到我的 Next js 应用程序中 但不断收到以下错误 无法对 文档 执行 写入 无法写入 从异步加载的外部脚本写入文档 除非 它是明确打开的 可以找到我尝试使用的代码here https w
  • Chrome 不渲染
    标签,FF 渲染

    我有一个非常烦人的问题 我的网站有一个表单 可以在 Firefox 中运行 但不能在 IE 或 Chrome 中运行 它是用 WordPress 的 Gravity Forms 制作的 但这可能与该问题无关 因为另一个表单插件也出现了同样的
  • Twitter Bootstrap Modal 无法在 Rails 中工作

    我还很新Rails and to twitter bootstrap 我正在研究模态 但我收到了 NoMethodError 未定义的方法 渲染 当我删除 代码来自my release js erb页面 它消失但没有窗口出现 另外 还有错误
  • 如何将上传的二进制文件 (ASCII-8BIT) 嵌入 XML (UTF-8) 中?

    我有一个通过常规上传的文件form for 这给了我一个ActionDispatch Http UploadedFile我可以调用的 params 哈希中的对象 read来获取内容 我现在需要将该文件嵌入到 XML 文档中 我现在使用常规
  • 在 Rails 6 上添加外部 js 文件

    我在 app gt javascript gt packs 下创建了一个名为 custom 的文件夹 并放置以下外部 js metisMenu min js startmin js 然后在 app gt javascript gt pack
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • 如何使用 django (python) 和 s3 上传文件?

    我正在寻找一种将文件上传到 s3 的方法 我正在使用 django 我目前正在使用亚马逊的 python 库进行上传以及以下代码 View def submitpicture request fuser request session lo
  • 为什么Disabled = true对于html有效?

    我注意到我们的代码中有一个disabled ture 我是锚标签的源代码 我想知道为什么它在 IE 中有效 我也在互联网上进行了搜索 通过网络搜索 它也被用于很多源代码中 我一直在搜索if ture 拼写错误的true也可以被IE使用 有人
  • 在 Rails 中使用 config.assets.precompile 将资源包含在子目录中

    我有一个在 Heroku 上运行的 Rails 3 1 3 应用程序 通过 S3 进行资产托管asset sync 包含在我的app assets css目录是一个包含两个文件的子目录 main css scss and categorie
  • 使用 jQuery 的 .trigger('dragstart') 实现 HTML5 的拖放功能时如何 .setData/.getData

    当使用 jQuery 的 trigger dragstart 在具有 ondragstart drag event 属性的元素上触发函数时 如何使用 setData getData 实现 HTML5 在触摸设备上的拖放 流程示例 用户通过
  • 使用过渡添加子项时 div 的平滑增长

    尽管使用了以下代码 但其行为并不符合我的预期transition所以可能有些事情我不明白 理想情况下 单击该按钮会将一个子项添加到id2div 并制作id1分区增长smoothly因此 function id1 button click g
  • 在java中将DataURL图像转换为图像文件

    我在我的 java servlet 中接收图像 DataURL 它看起来像 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAA 我需要将其另存为图像文件 我该怎么做 The simplest w
  • javascript获取网页中选定文本的段落

    突出显示文本后 我想获取所选文本所在的段落 var select window content document getSelection 请问有什么指点吗 这实际上很难做到 因为你必须考虑六种情况 所选内容不在一个段落内 简单 整个选择都
  • 如何使链接悬停时的背景图像模糊?

    当您用鼠标光标悬停链接时 我想让我的背景图像模糊 5 像素 有什么简单的方法可以实现这一点吗 我有点纠结于类和 id 在这里 pic background url http www metalinjection net wp content
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • html5 vs flash - 完整的比较图表在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 因此 自从史蒂夫 乔布斯说 Flash 很糟糕并暗示 HTML5 可以完成 Flash 可以做的所有事情
  • 透明、无边框文本输入

    如何删除周围的边框
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何

随机推荐

  • 在 Cuda 中实现 MaxReduce

    我一直在学习 Cuda 并且仍在掌握并行性 我目前遇到的问题是对值数组实施最大减少 这是我的内核 global void max reduce const float const d array float d max const size
  • Put 方法出现 405 JSP 错误

    我遇到了有关 JSP 不接受 PUT 请求的问题 所以我想知道如何解决它 我已经在堆栈溢出中阅读了此相关问题 但它没有解释如何修复它 HTTP 状态 405 JSP 只允许 GET POST 或 HEAD 来自 Rails 背景 我试图做到
  • iOS 8 自定义键盘

    我正在尝试构建一个自定义键盘 它就像表情符号键盘 但键盘的数据来自 json 文件 解析这个json文件并获取数据后 如何让自定义键盘使用它并显示在键盘视图中 就像内置的表情符号键盘一样 现在 我遵循应用程序扩展键盘 自定义键盘指南 这里只
  • 使用php向oracle数据库插入数据

    下面的代码正在生成这个 Warning oci execute function oci execute ORA 00911 invalid character in F wamp www SEarch Engine done php on
  • 绑定 SelectedItem 与 SelectedIndex - 我什么时候应该选择其中之一?

    假设您有一个对象类型 Foo 的可观察集合 并且有一个用户将从中进行选择的自定义 ListView 您绑定的数据对象 property with getter setter INotifyPropertyChanged Observable
  • 如何列出所有未更改(跟踪)的文件?

    我将旧的 git image 解压缩到我的 git 存储库中 大部分文件已更改 我想知道哪些文件保持不变 如何列出这些文件 我没有找到任何纯粹的 git 内容 但使用一些 bash 是可能的 git ls files modified gi
  • 如何在一秒内计算任意 n <= 600 的最短加法链?

    你如何计算最短加成链 sac 对于一秒内任意 n Notes 这是编程竞赛codility这个月 加法链在数值上非常重要 因为它们是计算 x n 通过连续乘法 的最经济的方法 Knuth s 计算机编程艺术 第 2 卷 半数值算法对加法链和
  • (如何)我可以增加Android WebView中LocalStorage的配额限制

    我需要增加 Android WebView 中 LocalStorage 的默认配额限制 目前我只能使用大约2 5MB 当尝试存储更多数据时 quota exceeded err dom exception 22 被提出 有什么想法或者我必
  • 无法使用 ruby​​ selenium webdriver 连接到浏览器

    我尝试使用 ruby selenium webdriver 运行一些基本的自动化测试 相同的代码在我的家庭计算机上完美运行 但在位于代理 不需要身份验证 后面的工作计算机上失败 驱动程序 Selenium WebDriver for fir
  • mongo-go-driver 通过 _id 查找文档

    我试图通过自动生成的 id 字段查找文档 下面的代码不返回任何内容 var documentID bson RawValue documentID Type 7 documentID Value byte 5c7452c7aeb4c97e0
  • JList 项目中的自动换行

    我有一个JList项目名称很长 导致水平滚动条出现在滚动窗格中 无论如何 我可以自动换行 以便整个项目名称显示在两行中 但可以一键选择吗 I E它仍然应该behave作为一个单一的项目 但显示的分成两排 这是我在看到下面的例子后所做的 我向
  • 如何使用networkx绘制子图

    我尝试根据节点名称列表从 networkx 中的 karate club graph 绘制子图 但失败了 如何绘制我想要显示的子图 import networkx as nx from matplotlib import pylab as
  • jQuery 获取选择选项 ID 并更改隐藏输入值

    我有一个带有选择列表的表单 每个选项还包含一个动态 ID 我需要捕获该 ID 然后使用它来更改隐藏输入的值 因此 基本上采用选定的选项 id 并更改隐藏输入值的值 我的选择和隐藏输入如下所示
  • 有人可以向我解释一下 Java 中通过“值”而不是“引用”传递的原因是什么吗?

    我对 Java 相当陌生 多年来一直在写其他东西 除非我遗漏了一些东西 并且我很高兴在这里犯了错误 否则以下是一个致命的缺陷 String foo new String thisDoesntWork foo System out print
  • Hibernate:hbm2ddl 反转列顺序[重复]

    这个问题在这里已经有答案了 我让 hbm2ddl 为我创建表 出于开发目的 并且列的顺序与类中字段的顺序相反 我怎样才能让它以与类相同的顺序创建列 我认为 Java 类不存储字段的顺序 因此 Hibernate 根本不知道源中的顺序是什么
  • 使用已知但无法访问的 wsdl 创建 Web 服务客户端

    与我们合作的一家公司通过电子邮件向我们提供了 wsdl 和 xsd 架构 我们所连接的 Web 服务是通过 IPsec 隧道访问的 已发布的 WSDL 中有本地引用 在其末尾 这意味着我们无法使用它 第一个问题 这是常见的设置吗 我认为拥有
  • Celery任务链取消?

    我发现celery支持任务链 http celery readthedocs org en latest userguide canvas html chains 问题是 如何停止任务中链的执行 例如 我们得到了 N 个项目的链 N gt
  • 使用主应用时如何刷新Widget?

    我正在使用一个UIKit应用程序并添加了一个小部件SwiftUI and Widgetkit 现在 当用户在主应用程序中执行某项操作时 我想更新小部件 通常我应该使用WidgetCenter shared reloadAllTimeline
  • 如何在 Selenium WebDriver 中检查单选按钮是否被选中?

    这是我的 HTML 代码 div class selectCard left div
  • 使用 Carrierwave (HTML5) 将多个文件一次上传到 Rails 应用程序

    我很接近 非常接近 我可以很好地上传单个文件 但是当我更改表单的类型时file field to multiple gt true所以我可以一次上传多个图像 我上传的文件被包装在一个数组中 并且 accepts nested attribu