Как я могу вставить много записей из контроллера в рельсы? - PullRequest
0 голосов
/ 30 января 2020

У меня есть модель класса Как:

class Classroom < ApplicationRecord
    has_many :students,dependent: :destroy
end

У меня есть модель студента Как:

class Student < ApplicationRecord
    belongs_to :classroom, optional: true
    validate :check_student_limit
    def check_student_limit
        if Student.where(classroom_id: self.classroom_id).count > 4
            self.errors.add(:name, "Over limit of student in classroom")
        end
    end
end

Класс has_many ученик, поэтому я хочу обновить выбранный класс учеников.

Предположим, у меня есть класс с идентификатором: 4. Теперь я выбираю трех учеников в этом классе, у которых есть идентификатор (14, 15, 16), и я также выбираю идентификатор, в который я хочу переместить этих трех учащихся. , Допустим, я хочу переместить этих трех учеников в Classroom_id: 5, Эти три ученика должны переместиться в класс 5, а трех учеников удалить из класса 4.

Я создаю новую форму для выбора пропущенных студентов и новую класс для этих студентов. В моем контроллере действий для этой формы я получаю выбранный students_ids и новый идентификатор класса

Но теперь я застрял здесь. Как я могу вставить всех этих выбранных учеников в выбранный класс? Я пытаюсь решить эту проблему, пожалуйста, помогите мне, если можете.

Вот изображения для справки.

Вот как я могу выбрать учеников и новые классные комнаты: This is  how can I selected the students and new classrooms

В консоли я получил следующие параметры: I got the following params in console

1 Ответ

0 голосов
/ 30 января 2020

Совет: Вы слишком много написали о своей проблеме, что означает, что многие могут пропустить ее по причине TLDR.

Ваша настоящая проблема в том, что у вас есть массив student идентификаторов и новый classroom идентификатор, но вы застряли с тем, как обновить их сразу, т.е. добавить в новый класс и удалить из предыдущего.

Вы можете добиться этого, просто изменив их classroom_id с x на y в действии контроллера, на которое вы отправляете сообщение:

  def updateclass
    Student.where(id: params[:student_ids]).update_all(classroom_id: 5)
    # This will move them to classroom 5 and remove from classroom 4.
  end

Вам нужно использовать только update_all. Если есть еще что-то к этой проблеме, прокомментируйте ниже, и я обновлю ответ.

...