0

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

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”方法?

4

3 回答 3

4

你可以使用一个数组:

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

partials.each { |p| render partial p }
于 2013-06-08T18:43:19.577 回答
1

这是我可以做到的。它不再是干燥的,但它读起来更好,IMO:

flag = controller == home

render flag ? :partial0 : :partial1
render :partial2
render :partial3
render :partial4 if flag
render :partial5
于 2013-06-08T19:52:56.380 回答
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的答案相比,这可读性较差

于 2013-06-08T20:08:04.970 回答