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

Ruby on rails 更改一条记录时,相关记录将被覆盖,ruby-on-rails,controller,associations,Ruby On Rails,Controller,Associations,当我尝试编辑一条记录的列的值时,该列与父记录关联(例如,作业有许多作业详细信息),每个记录都会被覆盖,而不仅仅是这一条记录 例如:一个作业有许多作业详细信息。我希望能够编辑一个jobdetail的标题。当我保存记录时,它会工作,但现在属于该作业的所有其他作业详细信息都具有相同的标题。新唱片的创作没有问题,只有编辑在制造麻烦 型号 作业有很多:作业详细信息 Jobdetail属于:job 路线 resources :jobs do resources :jobdetails end def

当我尝试编辑一条记录的列的值时,该列与父记录关联(例如,作业有许多作业详细信息),每个记录都会被覆盖,而不仅仅是这一条记录

例如:一个作业有许多作业详细信息。我希望能够编辑一个jobdetail的
标题
。当我保存记录时,它会工作,但现在属于该作业的所有其他作业详细信息都具有相同的标题。新唱片的创作没有问题,只有编辑在制造麻烦

型号
作业
有很多:作业详细信息

Jobdetail
属于:job

路线

resources :jobs do
   resources :jobdetails
end
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
作业详细信息\u controller.rb

resources :jobs do
   resources :jobdetails
end
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操作中的重复语法是不必要的。

我尝试了几种不同的语法,但都不起作用。提前谢谢

更新正在进行“大规模”更新的行:

要执行单个操作,请执行以下操作:

if @jobdetail.update(jobdetail_params)

使用
@job.jobdetails.update
可以获取与@job关联的所有jobdetails,并使用jobdetail_参数中的值更新所有jobdetails。由于您已经初始化了要更新的特定jobdetail(
@jobdetail=jobdetail.find(params[:id])
),因此必须对该对象调用
update

您的答案解决了我的问题。谢谢你!我真的认为if声明只会。。。检查是否存在某些内容并且不会执行某个操作:DSometimes它可能会令人困惑,但它仅通过调用该方法来检查结果是否真实,从而减少了一些行数。很乐意帮忙。