Rails: обратный вызов after_create срабатывает только на производстве - PullRequest
0 голосов
/ 20 сентября 2018

Кто-нибудь знает, почему обратный вызов 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"}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...