【问题标题】:How to update with strong parameter?如何使用强参数进行更新?
【发布时间】:2021-07-25 08:25:50
【问题描述】:

我想做什么

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

Order 具有 total 列。
List 具有 pricequantity 列。

我想通过将每个 lists 行的小计相加来更新 Ordertotal

我做了什么

这是我的 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

【问题讨论】:

  • order_params有哪些参数?

标签: ruby-on-rails strong-parameters


【解决方案1】:

有很多方法可以做到这一点。

# 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2018-03-31
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多