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 のようなデコレーターを見てください。

ワンライナーが必要な場合は、を使用してください。こちらlink_to_if参照してください。

于 2013-09-11T07:02:32.697 に答える