Как бы вы внедрили принцип "не говори" в 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)
Чтобы это работало, вам нужно инициализировать объект (ы) перед рендерингом, основываясь на значении оператора.