让我说我有: 带有许多“问题”的“调查”,其中包含许多“答案”
如果我有一个'调查'有两个'问题'实例,那就叫他们:'好问题'和'错误问题'
'好问题'有5'答案','不良问题'有3'答案'
如果'好问题'和'错误问题'与这个jQuery-UI交互连接可排序列表。 http://jqueryui.com/sortable/#connect-lists
我知道如何使用jQuery-UI将它们显示为2个可排序列表,我也可以从“不良问题”中删除“答案”到“好问题”。但是,如何将新的排序位置和新排序的关联保存到另一个“问题”回到Rails数据库?
Railscasts如何为单个可排序列表保存位置,但不保存属于不同关联模型的列表。 http://railscasts.com/episodes/147-sortable-lists-revised
我非常感谢这里的帮助!
修改
我意识到我只需要向Rails控制器发送POST,这是我将'Answer'放入(即<ol class = "connectableSortable" id = "Good_Question"</ol>
)
这是Railscast如何对Rails控制器执行POST以按可排序顺序传递object_id数组的语法。
jQuery ->
$('#faqs').sortable(
axis: 'y'
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
)
如何更新此POST以将列表ID传递给它,这样我就可以更新“问题”外键,将“答案”更新为它所属的列表“ID”?
这个SO答案有办法检索列表ID。 Get the item/object where the element is dropped
所以现在,我真的只需要知道如何将额外的参数传递回rails控制器。有什么帮助吗?
答案 0 :(得分:3)
经过几天的努力,我能够弄清楚我想要的东西。 这里的模型是一天有很多活动(相对于一个问题的原始问题有很多答案)。
这是我的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
有关我如何通过以下两个答案达到此目的的详细信息:
Formatting Parameters for Ajax POST request to Rails Controller - for jQuery-UI sortable list