Как обновить объект, который не был сохранен, без его сохранения? - PullRequest
0 голосов
/ 14 мая 2018

Итак, я делаю это:

@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 голосов
/ 14 мая 2018

Если вы обновляете только один атрибут, вы можете просто использовать установщик:

@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))
0 голосов
/ 14 мая 2018

Попробуйте assign_attributes, он принимает хеш в качестве параметра и не попадает в базу данных, он работает только на объекте

@port_stock.assign_attributes(current_price: stock.price)

Очевидно, если вы хотите просто обновитьодно поле, ответ @ Серхио лучше и проще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...