你如何在HAML中实现“告诉不要问”的原则?

时间:2012-10-03 21:35:58

标签: ruby haml helper tell-dont-ask

这就是事情。我有一个按钮,根据场景,它会表现,看起来和有不同的文字。现在大概是这样的:

- 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为真。

所以这是一团糟。我最近读到了非常喜欢的“告诉,不要问”的原则,所以我很乐意在这里应用它...但我不确定如何。

我知道我可以帮助他,但我想远离他们,因为原因(我确实有一些合理的理由这样做,但这些超出了这个问题的范围)。我可以使用它作为最后的资源,但宁愿找到另一种解决方案。

1 个答案:

答案 0 :(得分:1)

这与haml无关。您可以从tekll-don'r问题的示例开始:

- 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的真实含义)

为此,您需要在渲染之前根据语句值初始化对象。