0

我正在尝试将 jQuery-UI 可排序连接列表的位置保存到 Rails 后端。尝试将参数保存到数据库时,我遇到了 Rails 控制器操作问题。我得到的错误是TypeError (can't convert Symbol into Integer):

我发送的 Ajax POST 请求中的参数如下所示,看起来不错:

Activity:[{"id":"65","column":"48"},{"id":"65","column":"48"},{"id":"67","column":"48"}]

我的 Rails 控制器操作是这样的(我正在尝试使用 'id' 的 id 更新 Activity 并使用 'position' 和 day_id 的 'column' 更新属性位置:

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

我在终端中收到此错误:

    Started POST "/trips/sort" for 10.0.2.2 at 2012-11-04 23:52:30 +0000
Processing by TripsController#sort as */*
  Parameters: {"Activity"=>"[{\"id\":\"66\",\"column\":\"49\"},{\"id\":\"66\",\"column\":\"49\"},{\"id\":\"67\",\"column\":\"49\"}]"}
Completed 500 Internal Server Error in 1ms

TypeError (can't convert Symbol into Integer):

如果有帮助,这是我的 jQuery AJAX 调用:

    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()

我已经花了过去几个小时在这上面,只是想不通。我真的很感激时间和帮助。

4

1 回答 1

1

您想单独更新每个活动,如下所示:

JSON.parse(params[:Activity]).each_with_index do |x, index|
  id = x["id"]
  position = index+1
  column = x["column"]
  activity = Activity.find(id)
  activity.update_attributes(:position=>position, :column=>column)
end

(假设您的 JSON 解析工作正常,我没有检查过)

Activity.update_all将更新所有具有相同属性的活动(例如,将所有活动设置为第 5 列和位置 1),这不是您想要在此处完成的。

于 2012-11-05T03:29:47.437 回答