假设我有一个代表广告网络中的联属合作伙伴的Partner
模型。每个合作伙伴都与一个可以固定(绝对货币)或可变(百分比)的佣金相关联。 partners
表格使用commission_type
,commission_fixed
和commission_variable
列对此进行建模。这是一种简化,实际上有7种委托类型,因此单表继承或多个模型需要大量额外的代码。
在我看来,我想显示佣金,如下:
<div class="partner_commission"><%= partner.commission %></div>
(使用模型方法)
或
<div class="partner_commission"><%= commission(partner) %></div>
(使用辅助方法)
现在,需要注意的一个重要方面是整个应用程序是多语言的,因此视图中的每个字符串都必须使用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
,这感觉很奇怪。
您怎么看?
答案 0 :(得分:0)
我会说它应该进入模型。模型应该控制您的数据,这正是您希望佣金方法所做的。在MVC中完全可以使用模型方法来组合/修改数据,以便以良好的形式返回数据。