В вашем контроллере попробуйте это:
def update
@teacher = Teacher.new(parameters)
if params.has_key?(:students)
@teacher.students.clear #this removes the reference to all previous students.
params[:students].each do |i|
@teacher.students << Student.find(i)
end
end
@teacher.save!
end
В представлении редактирования вы можете отобразить список флажков, например:
<% @students.each do |i| %>
<li class="list-group-item">
<%= check_box_tag "students[]", i.id, @teacher.student_ids.include?(i.id) %>
<%= i.name %>
</li>
<% end %>
Вы бы просто поместили этот код в вашу форму где-нибудь. Убедитесь, что вы установили @students
и @teacher
в вашей функции edit
в вашем контроллере.
Надеюсь, это поможет.
ПРИМЕЧАНИЕ. Причина, по которой я выбрал поиск каждого учащегося перед добавлением его к справочнику «учитель / учитель» и удалением каждой ссылки на каждого учащегося / учителя в каждом запросе на обновление, была вызвана поддержкой функции безопасности, которую я использовал в недавно созданном приложении. Для моего случая я находил записи, связанные с определенной учетной записью. Вы также можете сохранить ссылки, как @jwoodrow сказал в комментариях.