无法更新rails控制器中Update操作的关系

时间:2017-10-21 08:26:57

标签: ruby-on-rails-3

更新名为JobsI的资源时,想要将此更新中的某些值复制到与此资源相关的某些资源

乔布斯每小时有很多小时,有一段时间有两次。因此,如果我使用这些时间更新作业,我希望将它们复制到期间

我尝试了不同变体的代码,但期间实体没有更新。

  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

1 个答案:

答案 0 :(得分:0)

这可以让你更接近告诉哪些代码失败了,但你可能会遇到各种各样的错误。如果这不起作用,请取消注释binding.pry并确保小时属性已更新另外,看起来您已经两次获得@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]),但是你会因为你的周期模型而失去任何验证或回调。