我开始在项目中使用关注模式,因为这是第一次使用它,一些问题浮现在脑海中。首先,让我分享我正在努力澄清的代码snipet。
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 :(得分: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应该根据其调用者权限来处理批准业务逻辑吗?