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

时间:2014-12-11 00:57:14

标签: javascript jquery ruby-on-rails ajax

我一直绞尽脑汁试图找出我在这里做错了什么 - 我正在尝试发送带有一些数据的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');

当我尝试console.log(positionData);我得到了

  

[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请求的成功功能中,并且没有运气,以及摆脱“返回错误”部分。我很困惑,为什么当我看到params通过时,它给我'nil',任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

替换控制器中的以下行

exercise_order = params[:position]

用这个

exercise_order = params["position"]