我目前在视图中有一些if语句,用于根据订阅状态确定向用户显示哪个按钮。我听说我们应该尝试将逻辑排除在观点之外。有没有更好的方法来做到这一点(甚至可能加载更快)?我不确定如何合并javascript,因为如果他们的系统没有javascript,我无法向用户显示所有按钮。
<% if @user.subscription_status == 'active' %>
<%= link_to "Downgrade to free account", cancel_subscription_path(@user) %>
<% end %>
<% if @user.subscription_status == 'canceled' %>
<%= link_to "Reactivate", reactivate_subscription_path(@user) %>
<% end %>
<% if !@user.subscription_id %>
<%= link_to "Upgrade", new_subscription_path(@user) %>
<% end %>
答案 0 :(得分:4)
有几种选择。
但首先:
您当前的实施非常糟糕:除了您的对象之外的任何人都必须检查其内部。
有几个条件并不是什么大问题
所以在你的模型中,做:
def active?
subscription_status == 'active'
end
并替换:
<% if @user.subscription_status == 'active' %>
使用:
<% if @user.active? %>
如果你想深入挖掘,可以看一下装饰品,比如布料宝石。
如果您想要oneliners,请使用link_to_if
,see here.