Связанные записи перезаписываются при изменении одной записи - PullRequest
0 голосов
/ 01 мая 2019

Когда я пытаюсь отредактировать значение столбца одной записи, которая связана с родительской записью (например, у Джобса много заданий), каждая запись перезаписывается вместо одной этой записи.

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

Модель
Работа has_many :jobdetails
Jobdetail belongs_to :job

Маршруты

resources :jobs do
   resources :jobdetails
end

Jobdetails_controller.rb

def edit
  @job = Job.find(params[:job_id])
  @jobdetail = Jobdetail.find(params[:id])
end


def update
  @job = Job.find(params[:job_id])
  @jobdetail.update(jobdetail_params)

  respond_to do |format|
    if @job.jobdetails.update(jobdetail_params)
      format.html { redirect_to job_jobdetail_path(@job, @jobdetail), notice: 'Jobdetail was successfully updated.' }
    else
      format.html { render :edit }
      format.json { render json: @jobdetail.errors, status: :unprocessable_entity }
    end
  end
end


def set_jobdetail
  @job = Job.find(params[:job_id])
  @jobdetail = Jobdetail.find(params[:id])
end

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

1 Ответ

1 голос
/ 02 мая 2019

Обновите строку, которая выполняет «массовое» обновление:

if @job.jobdetails.update(jobdetail_params)

Чтобы сделать один:

if @jobdetail.update(jobdetail_params)

С @job.jobdetails.update вы получаете все детали работы, связанные с @job, и обновляете все их значениями из jobdetail_params. Поскольку вы уже инициализировали конкретную информацию о задании, которую хотите обновить (@jobdetail = Jobdetail.find(params[:id])), вы должны вызвать update для этого объекта.

...