如何在不保存的情况下更新尚未保存的对象?

mar*_*ion 0 ruby ruby-on-rails ruby-on-rails-5

所以我这样做:

@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
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我打电话时.update!,@port_stock它实际上会在@port_stock.save以后保存记录.

所以我的回调正在执行两次,这会弄乱我的数据库中的东西.

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

谢谢.

Ser*_*sev 9

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

@port_stock.current_price = stock.price
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

stock = Stock.find(port_stock_params[:stock_id])
@port_stock = PortStock.new(port_stock_params.merge(current_price: stock.price))
Run Code Online (Sandbox Code Playgroud)


Urs*_*sus 7

尝试assign_attributes,它接受哈希作为参数,不要点击数据库,它只适用于对象

@port_stock.assign_attributes(current_price: stock.price)
Run Code Online (Sandbox Code Playgroud)

显然,如果你只想更新一个字段,@ Sergio的答案会更好更简单