比方說,我有一個Partner
模型,代表廣告聯盟中的附屬合作伙伴。每個合作伙伴都與可以固定的佣金(絕對貨幣)或可變(百分比)相關聯。 partners
表使用列commission_type
,commission_fixed
和commission_variable
進行了建模。這是一種簡化,實際上有7種佣金類型,因此單表繼承或多種模式需要大量額外的代碼。動態翻譯模型或助手中的模型屬性?
在我看來,我想顯示的佣金,這樣的:
<div class="partner_commission"><%= partner.commission %></div>
(使用模型法)
或
<div class="partner_commission"><%= commission(partner) %></div>
(使用helper方法)
現在,需要注意的一個重要方面是整個應用程序是多語言的,所以每個條g視圖必須與I18n.translate
/I18n.t
幫助器一起翻譯。翻譯不僅包含數字/貨幣格式,因此需要爲佣金字符串進行自定義翻譯(不必介意爲什麼)。
的方法看起來像這樣(簡化模型版本):
def commission
case self.commission_type
when 'commission_fixed'
t(:commission_fixed, :value => self.commission_fixed)
when 'commission_variable'
t(:commission_variable, :value => self.commission_variable)
end
end
的問題是:我應該在哪裏實現commission
方法應符合MVC的理念,最佳實踐等?
將其放入幫手的原因是它只涉及視圖中的佣金數據的呈現,而不是數據本身。另一方面,必須實施一種輔助方法,它只涉及單個模型,但在許多視圖中使用,這種方法感覺不對。
之所以把它在模型將是該委員會字符串可以被看作是一個派生屬性,因此應該在模型中定義。另一方面,我必須手動包含i18n視圖助手在模型中使用I18n.translate
,這感覺很奇怪。
您認爲如何?
或者您可以從模型方法'{:type =>:commission_variable,:value => 0.20}'返回一個散列,並從視圖中使用I18n。 – rubish
這是不可能的,因爲參數在實際實現中並不總是相同的(即對於某些佣金類型它是'value',但對於其他類型則是'range_min'和'range_max') –