сложная проверка при обновлении объекта?

У меня есть модель «WorkDetail», а db-attrs, связанные с проблемой, - это «имя», «статус» и «утвержденный_статус» с целым типом данных, а определение класса модели выглядит следующим образом: -

class WorkDetail < ActiveRecord::Base
  enum name: [:smartcheck, :install, :verify]
  enum status: [:pending, :inprogress, :complete]

  belongs_to :work_order
  has_many :cabinets

  after_save :work_order_status_update

  private

  def work_order_status_update
    work_detail_count = self.work_order.work_details.count
    status_array = self.work_order.work_details.where(status: 2).count
    if status_array == work_detail_count
      if work_detail_count == 0
        self.work_order.update({status: "pending"})
      else
        self.work_order.update({status: "complete"})
      end
    else
      self.work_order.update({status: "inprogress"})
    end
  end
end  

Теперь я хотел бы добавить пользовательскую проверку, которая будет применяться для следующей проблемы: -

  1. проверка должна применяться только для процесса обновления.

  2. Если объект name == "smartcheck" и status == "complete", то только логический атрибут approved_status должен быть от updated до true (по умолчанию при переносе значение false), в противном случае должна выдаваться ошибка, если не выполнена проверка smartcheck, и статус не завершен при попытке обновить атрибут author_status.

Надеюсь, что вопрос имеет смысл и спасибо !!! заранее, ребята, Happy Coding.


person codemilan    schedule 31.12.2015    source источник


Ответы (1)


1) Проверка должна применяться только для процесса обновления

 after_save :work_order_status_update,  :on => :update

2) Если имя объекта == "smartcheck" и статус == "complete", то только логический атрибут author_status должен быть обновлен до true (по умолчанию false при переносе), иначе должен выдавать ошибку, если не smartchecked и статус не завершен при попытке обновить атрибут Approid_status.

def test_status_and_name
  if self.name == "smartcheck" and self.status == "complete"
    self.update_attributes(approved_status: true)
  else
    errors[:base] << "smartchecked and the status is not complete on trying to update approved_status attr."
  end
end
person Gupta    schedule 31.12.2015