带有ajax param url的rails:嵌套路由

时间:2015-11-28 22:05:43

标签: jquery ruby-on-rails ajax handsontable

我试图找到一个解决方案,但没有问题看起来像我的。

我有一个嵌套资源“学生”:

Client

新增:控制器代码

students_controller.rb

  resources :grades do
    resources :students
  end

我正在为使用Handsontable的学生创建大量的输入。我的问题是我不知道如何在咖啡代码中传递成绩id(或者如果我需要传递它)。

我尝试了这条新路线(如果我不创建GET路线引发错误,甚至在ajax部分选择POST。

before_action :set_grade

 def set_grade
    @grade = Grade.find(params[:grade_id])
  end

  def mass_input

 #use this to create the inserts (to_do) 
    datos = JSON.parse(params[:form_data])
  end

咖啡按钮代码

  get 'students/mass_input', to: 'students#mass_input'
  post 'students/mass_input', to: 'students#mass_input', as: 'mass_input'

我收到错误无法找到带有'id'= 的成绩(可以预见,我没有在网址中提供成绩ID)

我尝试了几种嵌套此mass_input路线的方法,但我收到错误“没有学生'id = mass_input'”

谢谢你们

编辑:按钮是INSIDE一个成绩,所以我必须传递当前网址成绩ID才能获得此群众学生的输入

1 个答案:

答案 0 :(得分:0)

您的代码失败了,因为您之前的过滤器set_grade期望参数为grade_id。您可以将此作为查询参数传递给您发送ajax请求的URL。

或者,如果您的批量创建实际上不需要成绩,则可以跳过此操作的前置过滤器:

before_action :set_grade, except: [:mass_input]

假设您在父页面中有grade_id,您可以使用生成的脚本标记将其传递给javascript:

行动中:

@grade_id = params[:id] 

在你的erb模板中:

<script>
  REGISTRY = { grade_id: "<%= @grade_id %>" }
</script>

在咖啡中,应该包含在上面的脚本标记之后:

  $('#stu_mass_input').on 'click', (e) ->
    form_data = { 
      mass_students: mass_students.getData(), 
    }
    $.ajax
      method: 'POST',
      data: { form_data: JSON.stringify(form_data)},
      url: "/students/mass_input?grade_id=#{REGISTRY.grade_id}"