当我尝试编辑与父记录(例如,乔布斯有很多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操作中不需要重复的语法。
我尝试了几种不同的语法,但是它们都不起作用。预先感谢!
答案 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
。