从 jquery 将数据发布到 rails 控制器不起作用

Posted

技术标签:

【中文标题】从 jquery 将数据发布到 rails 控制器不起作用【英文标题】:Posting data to a rails controller from jquery not working 【发布时间】: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,更不用说生成脚本并发送给客户端之前 用户上传任何文件。重定向必须发生在PhotosControllercreate 操作中 @NashBridges- 是的,正确的 filesAdded 不能以这种方式作为参数传递给 Rails url 帮助程序,因为当 ruby​​ 第一次解析文件时,它没有 filesAdded 变量。谢谢! .但是,因为它说Processing by PhotosController#create as JSON 重定向不应该在create 中。 window.location 正在重定向到 index。不是这样吗?也更新了答案。 【参考方案1】:

不完全是你打算做的事情在控制器中使用变量 -

重定向到photos#index时如何在脚本中传递文件长度:

window.location = "<%=j photos_path %>"+ '?files=' + filesAdded; 

即重定向到/photos?files=3,添加3个文件

然后捕获files 参数并限制要在photos#index 中渲染的照片:

@photos = current_user.photos.order('created_at DESC').limit(params[:files]) if params[:files].present?

【讨论】:

完美运行 - 我在我的模型中使用 order('created_at DESC') 所以我省略了那部分。谢谢。

以上是关于从 jquery 将数据发布到 rails 控制器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从原型迁移到 Jquery Rails,empty() 函数不起作用

如何将 json 数据从 ruby​​ 控制器传递到 javascript (Rails 6.1)?

如何使用 Ruby on Rails 将数据从控制器传递到模型?

将 JSON 对象从 rails 控制器发送到 Javascript

Rails 和 JQuery-将 DB 数据加载到文本字段中以进行保存和删除

Rails - 将信息从视图传递到 Javascript