修复Slim if else语句中的冗余

时间:2013-06-06 18:10:18

标签: html ruby-on-rails ruby ruby-on-rails-3 slim-lang

我的苗条文件中有以下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中,这不是我想要的,我希望子标记无论如何都存在。

2 个答案:

答案 0 :(得分:3)

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

您还可以内联该逻辑:

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

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

div
  = @my_presenter_object.title
  div ditto

答案 1 :(得分:1)

三级解决方案:

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

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

    = my_helper(x)
    

    然后在帮助器中,您可以插入x。非常强大。

  3. 使用if / else和partial。正如Alex已经提到的那样使用案例:if之后的长代码。