2

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

1 回答 1

4

几种选择。

但首先:

  • 您当前的实现非常糟糕:除了您的对象之外,没有人必须检查其内部结构。

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

所以在你的模型中,做:

def active?
  subscription_status == 'active'
end

并替换:

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

和:

<% if @user.active? %>

如果您想深入挖掘,请查看装饰器,例如 draper gem。

如果你想要 oneliners,请使用link_to_if请参阅此处。

于 2013-09-11T07:02:32.697 回答