我正在尝试布局一些部分,如下所示:
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”方法?
我正在尝试布局一些部分,如下所示:
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”方法?
你可以使用一个数组:
partials = (controller == home) ? [0,2,3,4,5] : [1,2,3,5]
partials.each { |p| render partial p }
这是我可以做到的。它不再是干燥的,但它读起来更好,IMO:
flag = controller == home
render flag ? :partial0 : :partial1
render :partial2
render :partial3
render :partial4 if flag
render :partial5
您可以使用数组,并且由于部分是有序的,因此对其进行排序,然后渲染:
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的答案相比,这可读性较差