Как бы вы внедрили принцип "не говори" в HAML?

Вот вещь У меня есть кнопка, которая в зависимости от сценария будет вести себя, выглядеть и иметь разный текст. Вот как это выглядит примерно на данный момент:

- if params[:param_A] && @statement_A
  %span.button.cancel_button{attribute: "value_B"}
    - if @statement_B
      = t('locale_A')
    - else
      = t('locale_B')
- elsif params[:param_A]
  %span.button.cancel_button{attribute: "value_A"}
    - if @statement_B
      = t('locale_A')
    - else
      = t('locale_B')

Есть также класс CSS, который должен иметь обе кнопки, если IF Statement_B равен true.

Так что это беспорядок. И недавно я прочитал о принципе "говори, не спрашивай", который мне очень понравился, поэтому я бы с удовольствием применил его здесь... но я не уверен, как это сделать.

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

1 ответ

Это не имеет никакого отношения к хамлу. Вы можете начать с того, как ваш пример должен выглядеть с помощью tekll-don'r ask:

- if params[:param_A] 
  %span.button.cancel_button{attribute: @object1.value}
    = t(@object2.locale)

или же

- if params[:param_A] 
  %span.button.cancel_button{attribute: @object.value}
    = t(@object.locale)

(в зависимости от ваших предпочтений / что на самом деле означает утверждение A/B)

Чтобы это работало, вам нужно инициализировать объект (ы) перед рендерингом, основываясь на значении оператора.

Другие вопросы по тегам