0

Я начинаю использовать шаблон проблем в проекте, и, поскольку это первый раз, когда он используется, некоторые вопросы приходят на ум. Прежде всего, позвольте мне поделиться скомпилотом кода, над которым я работаю, для уточнения.Вопросы о проблемах с Rails

module Approvable 
    extend ActiveSupport::Concern 

    included do 
     #validations 
     validates :approval_status, 
        presence: true, 
        inclusion: { :in => NixusValidation::ValidApprovalStatuses, :message => :inclusion, unless: 'approval_status.blank?' } 
     #scopes: 
      scope :approved, -> { where(approvalStatus: NixusValidation::ApprovalStatuses::APPROVED) } 
      scope :pending, -> { where(approvalStatus: NixusValidation::ApprovalStatuses::PENDING) } 
      scope :unapproved, -> { where(approvalStatus: NixusValidation::ApprovalStatuses::UNAPPROVED) } 
    end 

    #INSTANCE METHODS 
    #methods: 
    def approved?() 
      self.approval_status == NixusValidation::ApprovalStatuses::APPROVED 
    end 
end 

Эта проблема определяет общие черты «утверждаемой» модели, то, что должно быть одобрено как запрос присоединиться к примеру. Каждая одобряемая модель в моем проекте имеет 3 состояния, одобренные, ожидающие решения и неутвержденные. Вот некоторые из моих сомнений в коде, который я написал.

Для этого необходимо иметь атрибут appro_status, который необходимо каким-то образом сохранить. Это неправильно? Должны ли проблемы определять только интерфейсы? Если нет, как я могу обеспечить наличие этого атрибута в Rails? Есть ли способ сказать генератору модели рельсов всегда включать этот атрибут в подходящие модели без наследования?

Мне также необходимо реализовать метод approve(), но каждый подходящий класс имеет свой собственный процесс утверждения. Единственное, что можно сказать о том, что если все будет одобрено, то (?) Должно возвратиться после этого. Существует ли способ обеспечить существование метода approve(), если класс включает в себя вопрос «Утверждаемый»?

Это хороший случай для использования проблем?

Надеюсь, я поняла.

Спасибо заранее,

+0

Почему вы не создаете класс полиморфной модели для обработки всех утвержденных моделей вместо добавления столбца 'approventStatus' в таблицу каждой модели? – Surya

ответ

0

@Surya,

спасибо за идею. Чтобы убедиться, что я получил это право, вы предлагаете, чтобы у меня был класс ApprovalStatus с полиморфным отношением к: approvable.

Что-то вроде:

class ApprovalStatus < ActiveRecord::Base 
    belongs_to :approvable, polymorphic: true 
end 

class JoinRequest < ActiveRecord::Base 
    has_one :approval_status, as: :approvable 
end 

class PatchInstallation < ActiveRecord::Base 
    has_one :approval_status, as: :approvable 
end 

В этом случае ApprovalStatus является тот, который должен обрабатывать бизнес-логику утверждения, основанную на его права вызывающего абонента?

+0

Выглядит прямо мне. Вы пытались сохранить любую запись, чтобы увидеть, работает ли она так, как вы ожидаете? – Surya

 Смежные вопросы

  • Нет связанных вопросов^_^