0

在 html 中,我有 2 个带有 .column 类的 div。因此,我创建了一个 each 循环来序列化每个 .column div 的数据。

// item.js
$('.column').each(function(){
  update: $.post($(this).data('update-url'), $(this).sortable('serialize'));
});

例子是item[]=1&item[]=5&item[]=4item[]=2&item[]=3。这些参数将被发送到 rails 控制器,通过 POST 进行排序。

在 Rails 控制器中

def sort
  params[:item].each_with_index do |id, index|
    Item.where(_id: id.last).update(position: index+1)
    #Item.where(_id: id.last).update(position: index+4)
  end
  render nothing: true
end

Q:如何以 DRY 方式处理 post 参数?对于第一个请求 ( item[]=1&item[]=5&item[]=4),我想用 更新数据库 (mongoid) position: index+1,而第二个请求我希望它用 更新position: index+4。谢谢。

4

1 回答 1

0

您可以在表单中将增量值作为参数发送。在您看来,只需在标签内添加一个新的隐藏标签form(假设您使用的是 ERB):

<%= hidden_field_tag :increment, [INCREMENT_VALUE] %>

并编辑你的sort方法看起来像

def sort
  params[:item].each_with_index do |id, index|
    Item.where(_id: id.last).update(position: index+1 + params[:increment].to_i)
  end
  render nothing: true
end
于 2012-06-03T17:00:08.977 回答