所以我这样做:
@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
实例?
感谢。
答案 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的答案会更好更简单