Так что я думаю, что я сузил, как создавать / изменять ассоциации через формы. Тем не менее, я не могу удалить все ассоциации с помощью этого же метода, потому что представленные параметры включают пустой массив (ничего не выбрано в форме). Когда массив пуст, Rails не делает ничего вместо удаления всех записей ассоциации.
Итак, вот пример моего приложения. Вот две модели:
#app/models/student.rb
class Student < ApplicationRecord
has_and_belongs_to_many :classes
end
и
#app/models/class.rb
class Class < ApplicationRecord
has_and_belongs_to_many :students
end
Теперь допустим, что моя форма предназначена для Student
:
<%= form_with(model: @student, local: true) do |form| %>
<table class="table table-striped table-bordered table-hover student-datatable">
<thead>
<tr>
<th><%= check_box_tag "student_header_checkbox", 0, false %></th>
<th>Class Name</th>
</tr>
</thead>
<tbody>
<% @classes.each do |class| %>
<tr>
<td><%= check_box_tag "student[class_ids][]", class.id, is_student_part_of_class(class) %></td>
<td><%= class.name %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success btn-sm">
<i class='fa fa-save'></i> Save changes
</button>
</div>
<% end %>
Теперь в моем Student
контроллере я разрешаю class_ids
, выполняя это внизу:
#app/controllers/students.rb
def student_params
params.require(:student).permit(:class_ids => [])
end
Хорошо, так что все хорошо. Когда пользователь выбирает много классов, классы передаются контроллеру Student
в виде массива. Если выбраны классы, то создается соответствующая запись об ассоциации, и теперь эти ученики "has_and_belongs_to_many" классы.
Теперь вот проблема
Допустим, у вас есть несколько классов, добавленных к этому ученику, если вы удалите все классы , то в основном массив не будет передан в контроллер; следовательно, контроллер не удаляет все классы, связанные с этим учеником.
Если вы измените выбор, скажем, добавив класс, удалив класс и т. Д. чем-либо, кроме отмены выбора ВСЕХ классов , тогда все будет работать нормально.
Разве rails не обрабатывает автоматическое удаление всех записей об ассоциации, как это? Или я что-то делаю не так или что-то упустил?