0

我的苗条文件中有以下 if else 语句

- if x == 0
 div Some cool title here
- else
 div A different cool title goes here

这很好,但是我想在 div 中有一些子标签

- if x == 0
 div Some cool title here
   div Ditto
- else
 div A different cool title goes here
   div Ditto

这与 DRY 背道而驰。无论如何我可以减少这个代码,所以我不必两次看到子标签?到目前为止,我所做的任何尝试都导致我让子标签存在于一个 div 中而不是另一个 div 中,这不是我想要的,无论如何我都希望子标签存在。

4

2 回答 2

3

在视图中复制代码时,您应该使用部分来保存复制的代码并将部分呈现在您希望它出现的任何位置。我知道您的简化代码只是为了表明您的意图,但如果它更真实,我可以提供更多建议。

您还可以内联该逻辑:

div
  = x == 0 ? 'Some Cool Title' : 'Some Other Title'
  div Ditto

比这更好的方法是将逻辑移到更合适的地方,比如使用像 Draper 这样的 gem 来创建演示者对象。

div
  = @my_presenter_object.title
  div ditto
于 2013-06-06T18:24:48.403 回答
1

三级解决方案:

  1. 模板中的 if/else 就像您的原始代码一样。用例:短代码

  2. 使用助手。我喜欢这个。用例:具有明显模式的更长但不太长的代码。

    = my_helper(x)
    

    然后在 helper 中你可以插值x。很强大。

  3. 使用 if/else 和部分。正如亚历克斯已经提到的。用例:if 或 else 之后的长代码。

于 2013-06-06T18:30:40.577 回答