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

时间:2018-05-14 08:14:05

标签: ruby-on-rails ruby 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

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

所以我的回调正在执行两次,这会弄乱我的数据库中的内容。

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

感谢。

2 个答案:

答案 0 :(得分:9)

如果您只更新一个属性,则可以使用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))

答案 1 :(得分:7)

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

@port_stock.assign_attributes(current_price: stock.price)

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