#ruby-on-rails #strong-parameters
Вопрос:
Что я хочу сделать
В моем приложении есть Order
модель и List
модель. List
модель-дитя Ордена.
Order
имеет total
колонку.
List
имеет price
и quantity
колонки.
Я хочу обновить total
Order
их, добавив промежуточные итоги каждой lists
строки вместе.
Что я сделал
Вот мой 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(модель)
def total_price
lists.to_a.sum { |list| list.subtotal }
end
Чтобы обновить общую цену, я установил @order.total_price
значение @order.total
.
Но, как вы видите, он обновился с помощью сильного параметра( order_params
).
Я не мог решить, как обновить общую цену.
Что мне делать?
Окружающая среда
- рубин2.7.2
- рельс6
Комментарии:
1. Какие параметры у вас есть в order_params?
Ответ №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))
Наконец, самый простой способ, вероятно, использовать a 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)