如何从视图中删除逻辑

时间:2013-09-11 06:51:35

标签: javascript ruby-on-rails ruby performance

我目前在视图中有一些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 %>

1 个答案:

答案 0 :(得分:4)

有几种选择。

但首先:

  • 您当前的实施非常糟糕:除了您的对象之外的任何人都必须检查其内部。

  • 有几个条件并不是什么大问题

所以在你的模型中,做:

def active?
  subscription_status == 'active'
end

并替换:

<% if @user.subscription_status == 'active' %>

使用:

<% if @user.active? %>

如果你想深入挖掘,可以看一下装饰品,比如布料宝石。

如果您想要oneliners,请使用link_to_ifsee here.