Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-无法更新datetime中的小时数_Ruby On Rails_Datetime - Fatal编程技术网

Ruby on rails Rails-无法更新datetime中的小时数

Ruby on rails Rails-无法更新datetime中的小时数,ruby-on-rails,datetime,Ruby On Rails,Datetime,我有一个rails应用程序,其中“RFQ”具有datetime属性。日期在表单中更改,但我想将时间设置为始终为15:00 当我创建RFQ时,它可以正常工作,但如果我编辑它,它将更改为00:00:00 创建操作: def create @rfq = Rfq.new(rfq_params) @rfq.owner = current_user.email @rfq.due = @rfq.due.change(hour: 15) respond_to do |forma

我有一个rails应用程序,其中“RFQ”具有datetime属性。日期在表单中更改,但我想将时间设置为始终为15:00

当我创建RFQ时,它可以正常工作,但如果我编辑它,它将更改为00:00:00

创建操作:

 def create

   @rfq = Rfq.new(rfq_params)
    @rfq.owner = current_user.email
    @rfq.due = @rfq.due.change(hour: 15)
    respond_to do |format|
      if @rfq.save
        format.html { redirect_to @rfq, notice: 'Rfq was successfully created.' }
        format.json { render :show, status: :created, location: @rfq }
      else
        format.html { render :new }
        format.json { render json: @rfq.errors, status: :unprocessable_entity }
      end
    end
  end
更新操作

 def update
    @rfq.owner = current_user.email
    @rfq.due = @rfq.due.change(hour: 15)
    respond_to do |format|
      if @rfq.update(rfq_params)
        format.html { redirect_to @rfq, notice: 'Rfq was successfully updated.' }
        format.json { render :show, status: :ok, location: @rfq }
      else
        format.html { render :edit }
        format.json { render json: @rfq.errors, status: :unprocessable_entity }
      end
    end
  end
创建后:

  Rfq Load (0.2ms)  SELECT  "rfqs".* FROM "rfqs"  ORDER BY "rfqs"."id" DESC LIMIT 1
 => Wed, 01 Jul 2015 15:00:00 CDT -05:00
在我编辑之后

  Rfq Load (0.2ms)  SELECT  "rfqs".* FROM "rfqs"  ORDER BY "rfqs"."id" DESC LIMIT 1
 => Tue, 30 Jun 2015 00:00:00 CDT -05:00

您的问题是,在使用表单中的值更新属性之前,您正在更改属性
due
属性

您应该这样做:

def update
  @rfq.owner = current_user.email
  @rfq.attributes = rfq_params
  @rfq.due = @rfq.due.change(hour: 15)

  respond_to do |format|
    if @rfq.save
      format.html { redirect_to @rfq, notice: 'Rfq was successfully updated.' }
      format.json { render :show, status: :ok, location: @rfq }
    else
      format.html { render :edit }
      format.json { render json: @rfq.errors, status: :unprocessable_entity }
    end
  end
end

它可以工作,但为什么我必须将@rfq.update(rfq_参数)更改为if@rfq.save?为什么不总是使用.save而不是.update?主要区别在于,我们从第一个开始分配值,然后更改到期日期,然后保存
update
相当于从表单中分配参数并立即保存,这将覆盖之前设置的几行
due