无法更新 rails 控制器中更新操作的关系
Cant update relations on Update action in rails controller
更新名为 Jobs 的资源时我想将此更新中的一些值复制到连接到此资源的一些资源
Jobs 有很多小时,每个小时有一个周期,有 2 组时间。因此,如果我用这些时间更新作业,我希望将它们复制到期间
我在不同的变体中尝试了这段代码,但是期间实体没有得到更新。
def update
@job = Job.find(params[:id])
respond_to do |format|
if @job.update_attributes(params[:job])
@job = Job.find(params[:id])
@job.hours.each do |hour|
logger.debug params[:job][:start1]
logger.debug params[:job][:end1]
hour.periods.first.start_time = params[:job][:start1]
hour.periods.first.end_time = params[:job][:end1]
hour.periods.last.start_time = params[:job][:start2]
hour.periods.last.end_time = params[:job][:end2]
end
@job.save
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
结束
这应该让您更接近于判断是哪个代码失败了,但是您可能会在那里遇到各种各样的问题。如果这不起作用,请取消注释 binding.pry
并确保 hour 属性已更新 另外,看起来你得到了两次 @job
?试一试:
def update
@job = Job.find(params[:id])
respond_to do |format|
if @job && @job.update_attributes(params[:job])
logger.debug "Job updated attributes"
@job.hours.each do |hour|
hour.periods.first.update_attributes(start_time: params[:job][:start1])
hour.periods.first.update_attributes(end_time: params[:job][:end1])
hour.periods.last.update_attributes(start_time: params[:job][:start2])
hour.periods.last.update_attributes(end_time: params[:job][:end2])
# binding.pry
end
@job.save!
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
您可以通过在周期记录上调用 update_column
来稍微加快更新速度。即 hour.periods.first.update_column(:start_time, params[:job][:start_time])
,但这样做会丢失对周期模型的任何验证或回调。
更新名为 Jobs 的资源时我想将此更新中的一些值复制到连接到此资源的一些资源
Jobs 有很多小时,每个小时有一个周期,有 2 组时间。因此,如果我用这些时间更新作业,我希望将它们复制到期间
我在不同的变体中尝试了这段代码,但是期间实体没有得到更新。
def update
@job = Job.find(params[:id])
respond_to do |format|
if @job.update_attributes(params[:job])
@job = Job.find(params[:id])
@job.hours.each do |hour|
logger.debug params[:job][:start1]
logger.debug params[:job][:end1]
hour.periods.first.start_time = params[:job][:start1]
hour.periods.first.end_time = params[:job][:end1]
hour.periods.last.start_time = params[:job][:start2]
hour.periods.last.end_time = params[:job][:end2]
end
@job.save
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
结束
这应该让您更接近于判断是哪个代码失败了,但是您可能会在那里遇到各种各样的问题。如果这不起作用,请取消注释 binding.pry
并确保 hour 属性已更新 另外,看起来你得到了两次 @job
?试一试:
def update
@job = Job.find(params[:id])
respond_to do |format|
if @job && @job.update_attributes(params[:job])
logger.debug "Job updated attributes"
@job.hours.each do |hour|
hour.periods.first.update_attributes(start_time: params[:job][:start1])
hour.periods.first.update_attributes(end_time: params[:job][:end1])
hour.periods.last.update_attributes(start_time: params[:job][:start2])
hour.periods.last.update_attributes(end_time: params[:job][:end2])
# binding.pry
end
@job.save!
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
您可以通过在周期记录上调用 update_column
来稍微加快更新速度。即 hour.periods.first.update_column(:start_time, params[:job][:start_time])
,但这样做会丢失对周期模型的任何验证或回调。