Ruby on rails 更改一条记录时,相关记录将被覆盖
当我尝试编辑一条记录的列的值时,该列与父记录关联(例如,作业有许多作业详细信息),每个记录都会被覆盖,而不仅仅是这一条记录 例如:一个作业有许多作业详细信息。我希望能够编辑一个jobdetail的Ruby on rails 更改一条记录时,相关记录将被覆盖,ruby-on-rails,controller,associations,Ruby On Rails,Controller,Associations,当我尝试编辑一条记录的列的值时,该列与父记录关联(例如,作业有许多作业详细信息),每个记录都会被覆盖,而不仅仅是这一条记录 例如:一个作业有许多作业详细信息。我希望能够编辑一个jobdetail的标题。当我保存记录时,它会工作,但现在属于该作业的所有其他作业详细信息都具有相同的标题。新唱片的创作没有问题,只有编辑在制造麻烦 型号 作业有很多:作业详细信息 Jobdetail属于:job 路线 resources :jobs do resources :jobdetails end def
标题
。当我保存记录时,它会工作,但现在属于该作业的所有其他作业详细信息都具有相同的标题。新唱片的创作没有问题,只有编辑在制造麻烦
型号作业
有很多:作业详细信息
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它可能会令人困惑,但它仅通过调用该方法来检查结果是否真实,从而减少了一些行数。很乐意帮忙。