我開始在項目中使用關注模式,因爲這是第一次使用它,所以出現了一些問題。首先,讓我分享我正在努力澄清的代碼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()方法?
這是一個很好的情況下使用的擔憂?
希望我說清楚了。
由於提前,
爲什麼不創建多態模型類來處理所有可批准的模型,而不是在每個模型的表上添加'approvalStatus'列? – Surya 2014-11-24 12:21:44