Как мне управлять "если-то взрывом" в файлах представления?

Прошу прощения, если это не соответствует хорошему руководству по вопросам, но я надеюсь, что он хорошо разбирается в Как управлять взрывом CSS и получил такой же полезный ответ .

Я знаком с некоторыми базовыми стратегиями уменьшения растянутости представлений, такими как следующие:

  • Используйте помощники, где это уместно
  • Не повторяйте себя
  • Используйте партиалы и макеты

Не стесняйтесь что-то предлагать если мне не хватает какой-то важной идеи в приведенном выше списке.

Тем не менее, Я все еще получаю несколько измерений / степеней свободы в моем представлении, вызывая множество операторов if-then или, по крайней мере, троичных блоков. Например, в чем-то, с чем я сейчас возился, я работаю над панелью заголовка для программы, в которой представление вызывается, когда три "большие" переменные:

  • Является ли пользователь администратором
  • Является ли пользователь авторизован
  • Независимо от того, принадлежит ли просматриваемая страница пользователю или кому-то другому

В итоге получается такая неразбериха:

<% content_for :subheader do %>
  
<% if @user %> <% if @user == current_user %> <%= link_to 'My programs', user_programs_path(current_user), :class => 'active' %> <% else %> <%= link_to "#{@user.username}'s programs", user_programs_path(@user), :class => 'active' %> <% end %> <%= link_to 'Browse all programs', programs_path %> <% else %> <% if current_user %> <%= link_to 'My programs', user_programs_path(current_user) %> <% end %> <%= link_to 'Browse all programs', programs_path, :class => 'active' %> <% end %> <%= link_to 'New Program', new_program_path, :class => 'admin' if current_user.admin? %>
<% if @regions %>
<%= link_to 'Regional program search', request.fullpath, :class => 'active' %>
<% end %> <% end %>

Уродливо. Читабельно и легко доступно, но некрасиво. Некоторые предложения?

Благодаря опыту и новым технологиям, таким как LESS , я неплохо научился сокращать свои файлы CSS, но у меня все еще возникают проблемы с взрывом моих представлений MVC.

5
задан Community 23 May 2017 в 11:45
поделиться