首页 > 解决方案 > 如何在不保存的情况下更新尚未保存的对象?

问题描述

所以我这样做:

@portfolio = current_user.portfolio
@port_stock = PortStock.new(port_stock_params)
stock = Stock.find(port_stock_params[:stock_id])
@port_stock.update!(current_price: stock.price)

respond_to do |format|
  if @port_stock.save

我遇到的问题是,当我调用它时.update!,它实际上会在稍后@port_stock保存记录。@port_stock.save

所以我的回调被执行了两次,这弄乱了我的数据库中的东西。

那么在显式调用它之前,如何在不实际保存对象的情况下更新new实例呢?@port_stock.current_price@port_stock

谢谢。

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


如果您只更新一个属性,则可以使用 setter:

@port_stock.current_price = stock.price

或者你可以这样做:

stock = Stock.find(port_stock_params[:stock_id])
@port_stock = PortStock.new(port_stock_params.merge(current_price: stock.price))

推荐阅读