无法通过 Rails 中的 Ajax 请求传递参数

Unable to pass params via Ajax request in Rails

本文关键字:请求 参数 Ajax 中的 Rails      更新时间:2023-09-26

我一直在绞尽脑汁试图弄清楚我在这里做错了什么 - 我正在尝试发送带有一些数据的 ajax 请求,然后打开一个模态表单:

var position = $(".exercise-list").sortable('toArray');
var positionData = "["+position+"]"
$.ajax({
  url: window.location.href + '/create_workout_routine',
  method: 'POST',
  data: {
    position: positionData
  },
  success: (function() {
    return false
  }),
  error: (function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Status: " + textStatus); alert("Error: " + errorThrown); 
    return false
  })
});
$('#createWorkoutModal').modal('show');

当我尝试控制台.log(位置数据);我得到

[4,2]

这正是我所需要的。与我的日志相同:

Started POST "/workouts/new/create_workout_routine" for 127.0.0.1 at 2014-12-10 18:52:11 -0600
  Processing by WorkoutsController#new as */*
  Parameters: {"position"=>"[4,2]"}

这是我的控制器:

def create
  exercise_order = params[:position]
  @workout = Workout.new(workout_params)
  WorkoutRoutine.create(
    exercise_order.each_with_index.map { |x,i| 
      {:exercise_id => x,
       ....
      }
    }
  )
  ...
end

当我的createWorkoutModal弹出时,我提交了表单,并收到此错误:

NoMethodError (undefined method `each_with_index' for nil:NilClass):
  app/controllers/workouts_controller.rb:29:in `create'

我还尝试在 ajax 请求的成功功能中包含模态弹出窗口,但没有运气,以及摆脱"返回假"部分。我很困惑为什么当我看到参数被传递时它给我"零",任何帮助都非常感谢!

替换控制器中的以下行

exercise_order = params[:position]

有了这个

exercise_order = params["position"]