Кто-нибудь знает, почему обратный вызов after_create запускается только в производственной среде?
class Schedule < ActiveRecord::Base
belongs_to :account
validates :schedule_type, presence: true # default = 'appointment'
after_create :send_notification, if: :devices_and_appointment?
def devices_and_appointment?
account_has_devices? && schedule_type.appointment?
end
def account_has_devices?
!account.devices.blank?
end
def appointment?
schedule_type.eql?('appointment')
end
end
В производственном процессе обратный вызов срабатывает, даже если schedule_type не является назначением.Я проверяю журналы, и контроллер получает параметры, как и ожидалось (schedule_type! = Назначение)
По странной причине, когда вызывается after_create
, schedule_type является значением по умолчанию.
Мы проверяемэто на стадии разработки и даже в постановке env, и мы не можем воспроизвести ошибку.Различия между подготовкой и производством - это разделение базы данных (Octopus), но мы активировали его только для чтения, в некоторых других контроллерах, даже не в ScheduleController
В итоге мы переместили метод обратного вызова в службуВызов функции после .save
и устранение проблемы, но я все еще хочу знать, почему это происходит.
Контроллер:
def create
@schedule = Schedule.new(schedule_params)
if @schedule.save
render json: @schedule, status: 201
else
render json: { errors: @schedule.errors }, status: 422
end
end
def schedule_params
params
.require(schedule)
.permit(:account_id, :cause, :ends_at, :schedule_type, :starts_at)
end
Запрос:
Parameters: {"schedule"=>{"cause"=>"cause random", "starts_at"=>"2018-09-17T21:00:00.000-05:00", "ends_at"=>"2018-09-17T21:30:00.000-05:00", "schedule_type"=>"blocked", "account_id"=>"123"}}