2013-09-11 3 views
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 [email protected]_id %> 
    <%= link_to "Upgrade", new_subscription_path(@user) %> 
<% end %> 
+0

использовать 'helper' и использовать случай заявление вместо' если else' как 'случае subscription_status когда 'активный' .. когда 'отмена' ... еще .. . конец' –

+0

спасибо. Каким будет метод помощника? например, текст ссылки или частичный и т. д. – grabury

+0

он вернет 'link_to' то, что вы сделали –

ответ

4

Несколько альтернатив.

Но первое:

  • текущая реализация очень плохо: никто, кроме вашего объекта должен проверить его внутренности.

  • с несколькими условными не имеет большого

Таким образом, в модели, сделайте следующее:

def active? 
    subscription_status == 'active' 
end 

и заменить:

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

с:

<% if @user.active? %> 

Если вы хотите копать глубже, посмотрите на декораторов, как драгоценный камень драпировки.

Если вы хотите oneliners, используйте link_to_if, see here.

Смежные вопросы