Рельсы не сохраняют входные данные флажка из модели с ассоциацией «многие ко многим» - PullRequest
0 голосов
/ 03 июня 2018

У меня есть две модели Учитель и Ученик, и я установил отношения HABTM между двумя из них.У меня есть форма для каждого из них, чтобы создать новую запись в базе данных.Например, в форме создания учителя пользователь может ввести имя учителя в качестве входных данных и установить флажки, содержащие имена разных учащихся.Если пользователь помечает флажок, ввод не будет сохранен, но если флажок оставлен пустым, а пользователь просто вводит имя, новая запись сохраняется.Как ни странно, если пользователь обновляет учителя, это только время, когда он может выбрать учеников для включения в учительскую запись.

Вот как выглядят некоторые методы в TeacherController:

def new
  @teacher = current_user.teachers.build
end

def create
  @teacher = current_user.teachers.build(teacher_params)

  if @teacher.save
    redirect_to root_path
  else
    render 'new'
  end
end

def edit
end

def update
  if @teacher.update(teacher_params)
    redirect_to teacher_path(@teacher)
  else
    render 'edit'
  end
end

private
  def teacher_params
    params.require(:teacher).permit(:name, :student_ids => [])
  end

  def search_teacher
    @teacher = Teacher.find(params[:id])
  end

Ниже приведена форма, которую я использую для создания нового учителя и обновления существующего учителя:

<%= simple_form_for @teacher do |f| %>
  <%= f.input :name, label: "Teacher's Name" %>
  <label>Students</label>
  <br>
  <%= f.collection_check_boxes :student_ids, Student.all, :id, :name %>
  <br>
  <%= f.button :submit %>
<% end %>

Может также помочь отметить, что я столкнулся с этой проблемой только после введения аутентификации пользователя с devise вмое заявление.

1 Ответ

0 голосов
/ 03 июня 2018

Следуйте следующим шагам

в контроллере

def create
   @teacher = Teacher.new(teacher_params)
   @teacher.user= current_user
   if @teacher.save
     # code
   else
     # code
   end
end

private
def teacher_params
   params.require(:teacher).permit(:name, student_ids: [])
end

Форма

<%= f.collection_check_boxes :student_ids, Student.all, :id, :name do |cb| %>
    <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text } %>
<% end %>

См. collection_check_boxes и это отношение.

Если не работает, было бы лучше опубликовать Модели с отношениями.

...