【发布时间】:2012-03-29 11:57:49
【问题描述】:
我正在使用 JQuery 插件 (Plupload) 在我的网站上上传多个文件。上传完成后,我会将用户重定向到编辑页面,他们可以在其中标记和命名刚刚上传的照片。我可以访问上传的文件数量(通过调用存储文件的数组的长度),并且想在我的照片控制器中设置一个实例变量,以便我可以提取刚刚上传的文件。
重定向工作正常,日志显示参数传递了正确的整数。以下是日志显示的内容:
Started POST "/photos?files=1" for 127.0.0.1 at 2012-03-12 23:09:17 -0400
Processing by PhotosController#create as JSON
Parameters: {"files"=>"1"}
这是脚本中的重定向和发布操作:
//redirect after complete
function attachCallbacks(uploader) {
uploader.bind('FileUploaded', function(Up, File, Response) {
if( (uploader.total.uploaded + 1) == uploader.files.length)
{
var target = "/photos";
var filesAdded = uploader.files.length;
$.ajax({
type: 'post',
url: target + '?files='+filesAdded,
dataType: 'json'
});
window.location = "<%=j photos_path %>";
}
})
}
这是我尝试使用参数设置变量的 photos_controller.rb 索引操作:
class PhotosController < ApplicationController
respond_to :html, :json
def index
@data = params[:files]
@user = current_user
@photos = current_user.photos
@photo = Photo.new
end
我想将视图中的照片限制为仅显示刚刚通过调用以下命令添加的照片:
@photos = current_user.photos.limit(@data)
谢谢,如果您需要更多信息,请告诉我。
【问题讨论】:
-
不完全是您打算在控制器中使用变量做的事情,这就是为什么,我发表了评论 - 在重定向到索引时如何在脚本中传递文件长度为@ 987654325@ 并将索引中的照片限制为
@photos = current_user.photos.order('created_at DESC').limit(params[:files]) if params[:files].present? -
@prasvin 事实上,这正是@kcurtin 想要的。您唯一需要更正的是将
window.location保持原样(files参数在$.ajax调用中的url选项中传递) -
@NashBridges ajax 调用不是
create动作和在ajax 之后重定向到index吗?files参数已在 ajax 调用中传递。 OP 希望限制他的index调用中的照片,这就是为什么我在重定向到索引时添加了添加为files参数的总文件。我希望我做对了。 -
@prasvin 问题是
filesAdded是一个JS变量,不能传递给Rails url helper,更不用说生成脚本并发送给客户端之前 用户上传任何文件。重定向必须发生在PhotosController的create操作中 -
@NashBridges- 是的,正确的
filesAdded不能以这种方式作为参数传递给 Rails url 帮助程序,因为当 ruby 第一次解析文件时,它没有filesAdded变量。谢谢! .但是,因为它说Processing by PhotosController#create as JSON重定向不应该在create中。window.location正在重定向到index。不是这样吗?也更新了答案。
标签: jquery ruby-on-rails ruby-on-rails-3.1 plupload