我的rails应用程序成员可能具有两个不同的角色之一:vip_lite和vip。他们可以订阅计划以续订授权。
我们还有四种类型的计划:vip_lite/monthly、vip_lity/year、vip/monthly和vip/year。
vip用户可能正在订阅四个计划中的一个,vip_lite也是如此。不同角色、不同计划的会员可以在计划页面看到不同的按钮(例如vip_lite和订阅vip_lite/monthly会员可以在vip计划页面看到"升级"按钮(。
请参阅以下示例代码:(当前在助手中写入(
def plan_action_button(user)
if user.vip? && user.subscribing_plan?(:vip_lite, :monthly)
'button_a'
elsif user.vip? && user.subscribing_plan?(:vip_lite, :yearly)
'button_b'
elsif user.vip? && user.subscribing_plan?(:vip, :monthly)
'button_c'
elsif user.vip? && user.subscribing_plan?(:vip, :monthly)
'button_d'
elsif user.vip_lite? && user.subscribing_plan?(:vip, :monthly)
'button_e'
elsif user.vip_lite? && user.subscribing_plan?(:vip, :yearly)
'button_e'
... and so on...
end
end
因此,我必须为这些页面中的每个按钮处理2*4=8个条件。铁路上有没有一个好的模式来处理这种情况?感谢
这里可以使用一些有趣的模式。让我们看看重复次数最多的是什么:user.vip?
让我们从保护子句开始这个方法
def plan_action_button(user)
return 'whatever you need to return' unless user.vip?
if user.subscribing_plan?(:vip_lite, :monthly)
'button_a'
[...]
然后,因为有很多组合,很难判断这些按钮有什么变化,什么保持不变。它是I18n密钥吗?按钮标签是否有不同的链接?您是否可以分别访问user.plan_name
和user.plan_frequency
等部件?
回答这些问题将有助于你看到一种模式的出现。