如何将javascript数据发布到rails控制器操作?

时间:2015-09-07 19:33:13

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

我正在使用jQuery Shapeshift进行一些列表的拖放排序。我需要的是将下面的数据发送或发送到我的rails控制器操作,以便我可以更新订单。

这是我每次拖动列表时都会在控制台中获得的内容。

list_46
0
list_45
1
list_38
2
list_44
3
list_39
4
list_37
5

这是我需要将上述数据发送到的确切路径。我的路线设置正确。

sortlists_boards POST  /boards/sortlists(.:format) 

Javascript代码

jQuery(function() {
  $('.listwrap').shapeshift();
  return $('.listwrap').on('ss-rearranged', function(e) {
    $(this).children().each(function() {
      #I need to send/post these two lines below to sortlists_boards_path 
      console.log($(this).attr("id"))
      console.log($(this).index())    
    });
  });
});

一些可能有帮助的Github问题

https://github.com/McPants/jquery.shapeshift/issues/64

https://github.com/McPants/jquery.shapeshift/issues/88

https://github.com/McPants/jquery.shapeshift/issues/48

2 个答案:

答案 0 :(得分:0)

在每次拖放时创建/更新JavaScript对象,并向控制器发送ajax请求,您可以在其中读取对象并存储在数据库中。

答案 1 :(得分:0)

首先,修改您的Javascript以创建有序对的数组并将其发送到您的终端:

jQuery(function() {
  $('.listwrap').shapeshift();
  $('.listwrap').on('ss-rearranged', function(e) {
    ordered_items = [];
    $(this).children().each(function() {
      ordered_items.push([$(this).attr("id"), $(this).index()]);
    });
    $.post('/boards/sortlists',
      {ordered_items: JSON.stringify(ordered_items)},
      function(data, status, jqXHR) {
      // This is what gets rendered from your rails controller + action
    });
  });
});

然后,查看Rails端的内容并使用它执行某些操作

class BoardsController < ApplicationController
  # ...
  def sortlists
    logger.info params[:ordered_items]
  end
  # ...
end

输出将转到log / development.log