рельсы с ajax param url: вложенные маршруты

0

Я попытался найти решение, но никаких проблем не было похоже на мое.

У меня есть вложенный ресурс "ученики":

  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. Моя проблема в том, что я не знаю, как передать идентификатор класса (или, если нужно, передать его) в кофейном коде.

Я пробовал с этими новыми маршрутами (если я не создаю GET-маршрут, вы выбрасываете ошибку, даже выбрав POST в части ajax.

  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' = (ожидаемый, im не указывая идентификатор класса в URL-адресе)

Я пробовал несколько способов вложенных маршрутов mass_input, но я получаю сообщение об ошибке "Нет ученика с" id = mass_input ""

Спасибо, парни

edit: кнопка INSIDE класса, поэтому я должен передать текущий идентификатор уровня URL для этого входа для массовых студентов

  • 0
    Пожалуйста, опубликуйте код контроллера и отслеживайте полученные ошибки. Благодаря обновленным маршрутам нет необходимости вставлять идентификатор оценки в URL.
  • 0
    Спасибо за ответ, я разместил код контроллера, и это трассировка стека: app / controllers / Students_controller.rb: 85: в `set_grade '
Показать ещё 3 комментария
Теги:
handsontable

1 ответ

0
Лучший ответ

Ваш код не работает, потому что перед фильтром set_grade ожидает параметр grade_id. Вы можете передать это как параметр запроса в URL-адресе, на который вы отправляете запрос ajax.

В качестве альтернативы, если ваше массовое создание фактически не требует наличия класса, вы можете пропустить фильтр перед этим действием:

before_action :set_grade, except: [:mass_input]

Предполагая, что у вас есть class_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}"
  • 0
    Спасибо, я пытался без установки оценки, но мне нужен идентификатор оценки, чтобы присвоить учащемуся правильную оценку, как я могу передать идентификатор из URL? URL, по которому я нажимаю кнопку, уже имеет локальный хост grade_id : 3000 / schools / 4 / grades / 2
  • 0
    пожалуйста, проверьте обновленный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню