У меня есть quote
, в котором много shipping methods
. Когда я сохраняю quote
, цены на способ доставки не обновляются при использовании .first_or_initialize
. Я также попытался установить autosave: true
в моей ассоциации следующим образом:
quote.rb
has_many :shipping_methods, dependent: :destroy, autosave: true
У меня есть обратный звонок, который обновляет мои способы доставки и их цены (quote.rb).
before_save :refresh_shipping_rates
def refresh_shipping_rates
ShippingMethod.refresh_rates(self, admin = true)
end
Моя функция ShippingMethod.refresh_rates (shipping_method.rb):
def refresh_rates(record, admin)
#api call that returns a list of rates
updated_rates.each do |i|
rate = record.shipping_methods.where(name: i.name).first_or_initialize
rate.price = i.price
end
end
Моя цитата обновляется посредством отправки формы моему действию update
.
def update
@quote = Quote.find(params[:id])
@quote.update(parameters)
if @quote.valid?
flash[:notice] = []
flash[:notice] << "Successfully Updated"
render "update"
else
flash[:error] = []
@quote.errors.full_messages.each do |message|
flash[:error] << message
end
render "layouts/fail"
end
end
Я предполагаю, что shipping_methods
следует обновить просто потому, что они связаны с родительской записью, которая обновляется, даже если ни один из их атрибутов не передан через форму.