jQuery-UI Sortable Connected-Lists保存订单并与rails模型关联

让我们说:我有一个’调查’,有很多’问题’,有很多’答案’

如果我有一个’调查’有2个’问题’的实例,那就叫它们:’好问题’和’坏问题’

‘好问题’有5’答案’和’不良问题’有3’答案’

如果“好问题”和“错误问题”通过此jQuery-UI交互连接可排序列表。 http://jqueryui.com/sortable/#connect-lists

我知道如何使用jQuery-UI将它们显示为2个可排序列表,我也可以从“不良问题”中删除“答案”到“好问题”。 但是,如何将新的排序位置和新排序的关联保存到另一个“问题”回到Rails数据库?

Railscasts如何为单个可排序列表保存位置,但不保存属于不同关联模型的列表。 http://railscasts.com/episodes/147-sortable-lists-revised

我非常感谢这里的帮助!

编辑

我意识到我只需要POST到Rails控制器,列表的元素id,我将’Answer’放入(即<ol class = "connectableSortable" id = "Good_Question"

这是Railscast如何对Rails控制器执行POST以按可排序顺序传递object_id数组的语法。

 jQuery -> $('#faqs').sortable( axis: 'y' update: -> $.post($(this).data('update-url'), $(this).sortable('serialize')) ) 

如何更新此POST以将列表ID传递给它,因此我可以更新“问题”外键,将“答案”更新为它所属的列表“ID”?

这个SO答案有一种方法来检索列表ID。 获取放置元素的项/对象

所以现在,我真的只需要知道如何将额外的参数传递回rails控制器。 有帮助吗?

经过几天的努力,我能够弄清楚我想要的东西。 这里的模型是一天有很多活动(相对于一个问题的原始问题有很多答案)。

这是我的jQuery代码(在Coffeescript中):使用jQuery选择器获取每个列表项的ID和每个列表项的列ID。 将其作为参数显示为此Activity:[{"id":"1", "column":"1"}, {"id":"2", "column":"1"}...etc]

 jQuery -> $('[id*="day"]').sortable( connectWith: ".day" placeholder: "ui-state-highlight" update: (event, ui) -> neworder = new Array() $(this).children().each -> column = $(this).parent().attr("id").match(/\d+/)[0] id = $(this).attr("id").match(/\d+/)[0] neworder.push( id: id column: column ) alert neworder $.ajax url: "sort" type: "POST" data: { Activity: JSON.stringify(neworder) } ).disableSelection() 

我如何将AJAX调用解析回Rails控制器:我循环遍历数组中的每个{"id":"1", "column":"1"}对象,并获取它的索引位置。

 def sort JSON.parse(params[:Activity]).each_with_index do |x, index| idx = x["id"] positionx = index+1 column = x["column"] activity = Activity.find(idx) activity.update_attributes(:position => positionx, :day_id => column) end render nothing: true end 

回到我的模型中,我通过它的位置命令“活动”关联,所以当我在视图中列出它时,它会显示在正确的位置。

 class Day < ActiveRecord::Base has_many :activities, :order => 'position' accepts_nested_attributes_for :activities, allow_destroy: true end 

有关我如何通过以下两个答案达到此目的的更多细节:

将Ajax POST请求的参数格式化为Rails控制器 – 用于jQuery-UI可排序列表

jQuery AJAX POST到Rails控制器。 执行each_with_index时出错(TypeError无法将符号转换为整数)