【问题标题】:Processing double post request with rails使用 rails 处理双张贴请求
【发布时间】:2012-06-02 06:11:17
【问题描述】:

在 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 进行排序。

在轨道控制器中

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),我想用position: index+1 更新数据库(mongoid),而第二个请求我想用position: index+4 更新它。谢谢。

【问题讨论】:

  • 您是否考虑过添加一个新参数(例如“request_type”)或有两个不同的操作?
  • 它有效,但它会很难看吗?
  • 老实说,你在做的事情看起来有点难看。 :) 您也可以将增量作为参数(1 或 4)发送。
  • 我不知道如何将参数从 jQuery 发送到控制器。你能告诉我作为答案吗?谢谢!

标签: jquery ruby-on-rails ruby-on-rails-3 web-services mongoid


【解决方案1】:

您可以在表单中将增量值作为参数发送。在您看来,只需在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 2021-04-02
    • 2021-07-13
    • 1970-01-01
    • 2014-03-03
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多