Rails关注问题

问题描述:

我开始在项目中使用关注模式,因为这是第一次使用它,所以出现了一些问题。首先,让我分享我正在努力澄清的代码snipet。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个州,批准,未决和未批准。以下是我对我写的代码的一些怀疑。

为了解决这个问题,模型需要有一个approval_status属性,该属性需要以某种方式持久化。这是错的吗?应该只考虑接口的行为定义?如果不是,我如何在Rails中强制实现这个属性?有没有办法告诉rails模型生成器始终将这个属性包含在可继承的模型中,而不需要继承?

我还需要实现approve()方法,但每个可批准的类都有其自己的批准过程。唯一的共同点是,如果一切顺利批准?()应该在事后返回true。如果某个类包含Approvable关注点,是否有办法强制执行approve()方法?

这是一个很好的情况下使用的担忧?

希望我说清楚了。

由于提前,

+0

为什么不创建多态模型类来处理所有可批准的模型,而不是在每个模型的表上添加'approvalStatus'列? – Surya 2014-11-24 12:21:44

@Surya,

感谢您的想法。为了看看我是否得到了正确的结果,您建议我应该有一个ApprovalStatus类,它具有以下形式的多态关系:可批准的。

喜欢的东西:

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 

在这种情况下,审批状态是应该处理基于其主叫权approvement业务逻辑的人吗?

+0

看起来很对我。您是否尝试保存任何记录以查看它是否按照您期望的方式工作? – Surya 2014-11-25 06:53:01