- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我有几种使用嵌套属性的表单。我最近发现了 Dropzone JS,所以我想以我正在使用的各种形式实现它。
我有两个类似的模型:
游戏
class Games < ActiveRecord::base
has_many :screenshots, dependent: :destroy
accepts_nested_attributes_for :screenshots, allow_destroy: true
end
截图
class Screenshot < ActiveRecord::Base
belongs_to :game
mount_uploader :ssfile, ScreenshotUploader
end
通常,我会用这样的方式处理它:
new.html.haml
- content_for :breadcrumbs do
%h3.text-center New Game
.col-md-12#content
.row
= render 'form'
.row
.col-md-12
= link_to 'Back', games_path
_form.html.haml
.col-md-12
= form_for @game, :html => {:class => 'form-horizontal form-bordered'} do |f|
.section-title
%h3 General Data
.well
.form-group
=f.label :title, :class => 'col-md-2'
.col-md-6
= f.text_field :title, :class => 'form-control'
.form-group
= f.label :platform, :class => 'col-md-2'
.col-md-6
.input-group
= f.text_field :platform, :class => 'form-control'
.section-title
%h3 Screenshots
.well#screenshots
=f.fields_for :screenshots do |i|
=render 'screenshot_fields', :f => i
%hr
.links
=link_to_add_association 'Add Screenshot', f, :screenshots, :class => 'btn btn-default'
.row
.col-md-12
.actions
= f.submit 'Save', :class => 'btn btn-default'
_screenshot_fields.html.haml
.form-group
-if f.object.ssfile?
.col-md-2
=image_tag(f.object.ssfile_url(:thumb))
.col-md-4
%p
=f.file_field :ssfile, :class => 'styledfileinput'
-if f.object.ssfile?
.col-md-2
%p
=f.check_box :_destroy
=f.label :_destroy, 'Remove'
这很好用。当您单击“添加屏幕截图”时,它会加载 link_to_add_association
助手,它是名为 Cocoon 的 gem 的一部分。该助手将创建必要的 JS 以将代码“ block ”添加到表单,在本例中为文件输入,但通常您会有更多其他类型的输入,而不仅仅是一个。
我想用多文件拖放区替换 link_to_add_association
添加的 block 。
我对 new.html.haml
View 进行了以下更改:
.col-md-12
= form_for @game, :html => {:class => 'form-horizontal form-bordered', :id => 'gameform'} do |f|
-# *snip*
.well#screenshots
- @game.screenshots.each do |i|
=image_tag i.ssfile_url(:thumb)
%hr
.row
.col-md-12
.actions
= f.submit 'Save', :class => 'btn btn-default'
我将 #gameform
添加到 form_for
元素,并替换了显示图片的循环。到目前为止,一切都很好。现在的问题是我不知道文件应该如何与表单交互。
我在加载 Dropzone 配置的 coffeescript 上有这个:
ready = ->
if $('#gameform').length > 0
didthiswork = new Dropzone("#gameform", {
paramName: "game[screenshot_attributes][ssfile]"
})
else
console.log('ruh roh')
$(document).on('page:load ready', ready)
现在,我可以单击表单中的任意位置,它会显示上传对话框(这本身就是另一个问题),但是一旦我选择了图片,这些图片就无法正确保存。有没有办法使它与 fields_for
一起工作?我有很多其他表单使用非常相似的配置,所以我更希望不必更改我的应用程序的整个逻辑(如果可能的话)。
我想我已经取得了一些进步。我已经设法让表单发送数据,但是它们并没有像我期望的那样到达。
我使用此链接中的信息调整了配置:https://github.com/enyo/dropzone/wiki/Combine-normal-form-with-Dropzone
在我的 coffesscript 上产生了这样的结果:
Dropzone.options.articuloform =
autoProcessQueue: false
uploadMultiple: true
paramName: "game[screenshot_attributes][ssfile]"
parallelUploads: 100
maxFiles: 100
init: ->
myDropzone = this
# First change the button to actually tell Dropzone to process the queue.
@element.querySelector('input[type=submit]').addEventListener 'click', (e) ->
# Make sure that the form isn't actually being sent.
e.preventDefault()
e.stopPropagation()
myDropzone.processQueue()
return
# Listen to the sendingmultiple event. In this case, it's the sendingmultiple event instead
# of the sending event because uploadMultiple is set to true.
@on 'sendingmultiple', ->
# Gets triggered when the form is actually being sent.
# Hide the success button or the complete form.
return
@on 'successmultiple', (files, response) ->
# Gets triggered when the files have successfully been sent.
# Redirect user or notify of success.
return
@on 'errormultiple', (files, response) ->
# Gets triggered when there was an error sending the files.
# Maybe show form again, and notify user of error
return
return
这可以防止在我选择图像时自动上传数据(这很好),但是,一旦我按下提交按钮,数据就会以错误的结构到达。他们在来自数据中是这样到达的:
Parameters: {
"utf8"=>"✓",
"authenticity_token"=>"l2siCG2D4xW0eto48WM152MTusc6K5cQYem8K2a9c/Y=",
"game"=>{
"title"=>"Super Amazing AAA Title",
"platform"=>"Xbox One",
"screenshot_attributes"=>{
"ssfile"=>{
"0"=>#<ActionDispatch::Http::UploadedFile:0x000000055c7e98 @tempfile=#<Tempfile:/tmp/RackMultipart20150408-9276-14rfzqm>,
@original_filename="screenshot01.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"game[screenshot_attributes][ssfile][0]\"; filename=\"screenshot01.png\"\r\nContent-Type: image/png\r\n">,
"1"=>#<ActionDispatch::Http::UploadedFile:0x000000055c7df8 @tempfile=#<Tempfile:/tmp/RackMultipart20150408-9276-1opclgk>,
@original_filename="screenshot02.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"game[screenshot_attributes][ssfile][1]\"; filename=\"screenshot02.png\"\r\nContent-Type: image/png\r\n">,
"2"=>#<ActionDispatch::Http::UploadedFile:0x000000055c7d30 @tempfile=#<Tempfile:/tmp/RackMultipart20150408-9276-16r4kdq>,
@original_filename="screenshot03.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"game[screenshot_attributes][ssfile][2]\"; filename=\"screenshot03.png\"\r\nContent-Type: image/png\r\n">,
"3"=>#<ActionDispatch::Http::UploadedFile:0x000000055c7c90 @tempfile=#<Tempfile:/tmp/RackMultipart20150408-9276-qp1au3>,
@original_filename="screenshot04.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"game[screenshot_attributes][ssfile][3]\"; filename=\"screenshot04.png\"\r\nContent-Type: image/png\r\n">,
"4"=>#<ActionDispatch::Http::UploadedFile:0x000000055c7ba0 @tempfile=#<Tempfile:/tmp/RackMultipart20150408-9276-8g3pap>,
@original_filename="screenshot05.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"game[screenshot_attributes][ssfile][4]\"; filename=\"screenshot05.png\"\r\nContent-Type: image/png\r\n">
}
}
},
"null"=>"",
"commit"=>"Save",
"id"=>"2"
}
重要的部分是每个片段的名称
,它们以game[screenshot_attributes][ssfile][XXXX]
的形式到达,这是错误的,正确的格式应该是 game[screenshot_attributes][XXXX][ssfile]
。我可以在上面粘贴的部分中配置它,但重要的部分是 paramName
部分,我将其作为 paramName: "game[screenshot_attributes][ssfile]"
。
如果有人能提供任何线索,我将不胜感激。
最佳答案
终于找到了一种让 dropzone.js 使用 rails 嵌套属性的方法。您必须编辑 dropzone.js 来为多个附件设置 rails 嵌套属性数组的格式。
Dropzone.prototype._getParamName = function(n) {
if (typeof this.options.paramName === "function") {
return this.options.paramName(n);
} else {
return "" + this.options.paramName1 + (this.options.uploadMultiple ? "[" + n + "]" : "") + this.options.paramName2 + "";
}
};
然后在 dropzone 初始化 javascript 中初始化两个参数:
Dropzone.options.newTicket =
clickable:'#previews'
previewsContainer: "#previews"
dictDefaultMessage: "Drop files here or click to select files"
autoProcessQueue: false
uploadMultiple: true
paramName1: "ticket[attachments_attributes]"
paramName2: "[file]"
parallelUploads: 5
maxFiles: 5
addRemoveLinks: true
关于ruby-on-rails - Carrierwave 与 Dropzone JS。是否可以将它们与嵌套属性一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29487666/
我想要的是能够在输入获得焦点或失去焦点时执行某些操作(两个事件)。 我尝试了以下方法,但这按事件单独工作(单独编码时):仅在焦点上,或仅在失去焦点时。 另外,我希望它尽可能跨平台(包括触摸设备),这是
我分别研究了TableView的Filtering和Pagination。 过滤: this帖子帮助我满足了我的需要 分页: this , this帖子也帮助了我 我想像这样将它们组合在一起: 详情-
我是 TDD 方法的新手,所以我想知道是否有人经历过这种机智可以启发我一点。我想获得一些关于如何一起使用 UML 和 TDD 方法的线索。 我已经习惯了:用 UML 设计 --> 生成骨架类(然后保持
我尝试使用入口点和 cmd 设置 Docker。 FROM debian:stretch RUN apt-get update && \ apt install gnupg ca-certificat
我想要一个 Class 对象,但我想强制它所代表的任何类扩展类 A 并实现接口(interface) B。 我能做到: Class 或者: Class 但我不能两者兼得。有办法做到这一点吗? 最佳答案
我是 Rubymine 的长期用户。 Rubymine 非常适合基于 html 的 Rails 应用程序,但我现在正在做更多的 SPA 客户端工作(例如 javascript/react)。我发现我真
我注意到我使用的某个脚本依赖于原型(prototype)。 (Lightbox 2) 它会与 jQuery 在同一页面上一起工作吗?有没有办法确保它们不冲突? 最佳答案 可以,但你需要采取 speci
我需要对表中显示的数据进行分页并通过 ajax 调用获取它 - 这是我通过使用具有以下配置的 dataTables 插件来完成的 - bServerSide : true; sAjaxSource :
我是 gtk 新手,所以想知道在 C 语言中归档和 gtk 是否可以一起使用?例如,我可以从 .txt 文件中读取,然后在相同的代码中使用 gtk 在标签或其他内容中显示它吗?如果是,怎么办? 谢谢!
有没有人设法得到Bck2Brwsr最近与 Java 8/JavaFX 8 一起工作?有没有兼容的机会?我找不到太多关于它的信息,也没有一个好的起点。使用给定的 Maven archetype我遇到了几
在我的应用程序中,用户通过 openid(与 stackoverflow 相同)登录/注销。 我想通过 oauth 向第三方应用程序开放我的应用程序。 如何创建我的 openid-consumer 应
我在启动和运行 Hibernate 和 Spring 时遇到一些问题。我有一个网络服务器项目,它使用了其他几个具有持久实体的项目。我遇到的问题是,对于存储在 WEB-INF/libs 内的另一个 ja
我有 @ControllerAdvice 类,它处理一组异常。我们还有一些其他异常,这些异常用 @ResponseStatus 注释进行注释。为了结合这两种方法,我们使用博客文章中描述的技术:http
我想在屏幕上使用进度条而不是 progressDialog。 我在我的 XML View 文件中插入了一个进度条,我想让它在加载时显示并在不加载时禁用它。 所以我使用的是可见的,但它发生了,所以其余的
CREATE TABLE `users` ( `id` int(11) AUTO_INCREMENT, `academicdegree` varchar(255),
IN() 中使用的查询返回:1, 2。然而,整个查询返回 0 行,这是不可能的,因为它们存在。我在这里做错了什么? SELECT DISTINCT li.auto_id FROM links
亲们, 我如何在使用 Jade 生成的表单上实现 jQuery 样式?我想做的是美化 表单并使它们可点击。我在 UI 方面很糟糕。期间。 我如何在表单上实现这个可选择的方法? http://jquer
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我可以: auto o1 = new Content; 但不能: std::shared_ptr o1(new Content); std::unique_ptr o1(new Content); 我
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!