如何使用强参数更新?

问题描述

我想做什么

我的应用程序有 Order 模型和 List 模型。 List 模型是 Order 的孩子。

Ordertotal 列。
Listpricequantity 列。

我想通过将每个 total 行的小计加在一起来更新 Orderlists

我做了什么

这是我的 orders_controller。

def update
    @order = Order.find(params[:id])
    @order.total = @order.total_price
    if @order.update(order_params)
      redirect_to orders_path,notice: 'The order has been updated.'
    else
      render :edit
    end
  end

这是我的订单.rb(model)

  def total_price
    lists.to_a.sum { |list| list.subtotal }
  end

为了更新总价,我将 @order.total_price 设置为 @order.total。 但是如您所见,它更新了强参数(order_params)。
我无法解决如何更新总价。

我该怎么办?

环境

  • ruby2.7.2
  • rails6

解决方法

有很多方法可以做到。

# One is just to do it on separate lines.
@order.update(total: @order.total_price)
@order.update(order_params)

# Merge with order_params
@order.update(order_params.merge(total: @order.total_price))

最后,Rails 最常用的方法可能是在模型上使用 before_save

# Order.rb
before_save do
  total = lists.to_a.sum { |list| list.subtotal }
end

# orders_controller.rb
# just to
@order.update(order_params)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...