如何让这些“if”语句更干?

时间:2013-06-08 17:46:19

标签: ruby-on-rails ruby ruby-on-rails-3 dry

我正在尝试布局一些部分,如下所示:

if controller == home
   render partail 0
else
   render partial 1
end

render partial 2

render partial 3

if controller == home
   render partail 4
end

render partial 5

我已经重复了if controller == home部分三次。有没有办法让代码遵循“DRY”方法?

3 个答案:

答案 0 :(得分:4)

您可以使用数组:

partials = (controller == home) ? [0,2,3,4,5] : [1,2,3,5]

partials.each { |p| render partial p }

答案 1 :(得分:1)

这是我如何做到的。它不再是DRY,但它看起来更好,IMO:

flag = controller == home

render flag ? :partial0 : :partial1
render :partial2
render :partial3
render :partial4 if flag
render :partial5

答案 2 :(得分:1)

您可以使用数组,因为部分是有序的,所以对它进行排序,然后渲染:

partials = [2,3,5];                     # 2,3,5 are going to be rendered regardless of controller

case controller
when home
   partials.push(0,4);                  # if it's home use 0 and 4
else
   partials.push(1);                    # if not home use 1
end

partials.sort.each { |p| render partial p }  # sort and render in order

注意:此示例中有更多代码,但如果您希望在home之外使用其他条件,则会更灵活。我经常发现我的代码更加强大,从长远来看,它节省了我更多的时间;不过,我承认与FMc的答案

相比,这种可读性较差