我正在尝试布局一些部分,如下所示:
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”方法?
答案 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的答案