更改一条记录时,相关记录将被覆盖

时间:2019-05-01 20:58:53

标签: ruby-on-rails controller associations

当我尝试编辑与父记录(例如,乔布斯有很多Jobdetails)相关联的一条记录的列的值时,每条记录都会被覆盖,而不仅仅是这一条记录。

例如:一项工作有许多工作细节。我希望能够编辑一个jobdetail的title。当我保存记录时,它可以工作,但是属于该工作的所有其他jobdetail现在都具有相同的标题。新记录的创建没有问题,只有编辑麻烦了。

模型
职位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和edit操作中不需要重复的语法。
我尝试了几种不同的语法,但是它们都不起作用。预先感谢!

1 个答案:

答案 0 :(得分:1)

更新正在进行“大量”更新的行:

if @job.jobdetails.update(jobdetail_params)

要做一个:

if @jobdetail.update(jobdetail_params)

使用@job.jobdetails.update,您可以获得与@job相关的所有jobdetails,并使用jobdetail_params中的值更新所有它们。在已经初始化了要更新的特定作业详细信息(@jobdetail = Jobdetail.find(params[:id]))之后,必须在该对象上调用update