Выберите поле для создания или обновления записей has_many при обновлении - PullRequest
0 голосов
/ 16 мая 2019

Я хочу иметь простое поле выбора, которое позволяет пользователям выбирать некоторых пользователей для работы в команде.

#jobs.rb
class Job < ApplicationRecord
 has_many :team_members
end

#jobs_controller.rb
class JobsController < ApplicationController
  def update
    @job = Job.find(params[:id])
    if @job.update_attributes(job_params)
      flash[:notice] = "Job Saved"
      redirect_to job_path(@job)
    else
      flash[:alert] = "Job Not Saved"
      render :edit
    end
  end

  private
  def job_params
     params.require(:job).permit(     
     team_member_ids: []

    )
   end
end

# jobs/edit.html.erb
<%= f.select :team_member_ids, User.all, {:include_blank => "None"},{ :multiple => true} %>

Это дает мне ошибку

Не удалось найти TeamMembers с идентификаторами 117, 23, 30.

Я что-то упустил здесь?Или это неправильный подход к управлению данными в форме?

Обновление, хэш параметров:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"xxxx",
 "job"=>
  {
   "jobtype"=>"Cutting",
   "status"=>"Not_Started",   
   "team_member_ids"=>["", "117", "23", "30"]},
 "commit"=>"Update Job",
 "id"=>"84"}

1 Ответ

0 голосов
/ 16 мая 2019

Упс, это было немного глупо.

Идентификаторы - это идентификаторы пользователей, но я передавал их как идентификаторы team_member. Где team_member - таблица соединения. Исправлено было:

#add to job.rb
has_many :users, through: :team_members

# update jobs_controller.rb

private
  def job_params
     params.require(:job).permit(     
     user_ids: []
    )
   end
# update form field:
<%= f.select :user_ids, User.all,{:include_blank => "None"},{ :multiple => true} %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...