rails with ajax param url: 嵌套路由

rails with ajax param url: nested routes

我试图找到解决方案,但没有任何问题与我的相似。

我有一个嵌套资源 "students" :

  resources :grades do
    resources :students
  end

添加:控制器代码

students_controller.rb

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

我正在为使用 Handsontable 的学生提供大量输入。我的问题是我不知道如何在咖啡代码中传递等级 ID(或者如果我需要传递它)。

我尝试使用这条新路线(如果我不创建 GET 路线,即使在 ajax 部分选择 POST 也会抛出错误。

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

咖啡按钮代码

  $('#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'

我收到错误消息找不到 'id'= 的成绩(意料之中,我没有在 URL 中给出成绩 ID)

我尝试了几种嵌套此 mass_input 路由的方法,但出现错误 "No student with 'id = mass_input' "

谢谢大家

编辑:按钮在一个年级内,所以我必须为这个大量学生输入传递当前的 url 年级 ID

您的代码失败,因为您的前置过滤器 set_grade 需要一个参数 grade_id。您可以将此作为 url 中的查询参数传递给您 ajax 请求。

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

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}"