簡體   English   中英

帶有ajax參數URL的rails:嵌套路由

[英]rails with ajax param url: nested routes

我試圖找到一個解決方案,但看起來沒有問題。

我有一個嵌套的資源“學生”:

  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路由的方法,但收到錯誤“沒有學生的'id = mass_input'”

多謝你們

編輯:按鈕位於一個成績內,因此我必須為此大量學生輸入傳遞當前的URL成績ID

您的代碼失敗,因為您之前的過濾器set_grade期望使用參數grade_id。 您可以在將ajax請求發送到的URL中將其作為查詢參數傳遞。

或者,如果您的大量創作實際上並不需要成績,則可以跳過此操作的before過濾器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM