2013-01-12 71 views
1

好了,所以我在翻譯一個部分:Rails的:組織與部分行:收集

<%= render :partial => "box", :collection => @dashboard.charts %> 

在部分我組織每個「盒子」成3行像這樣:

if box_counter % 3 == 0 && box_counter != 0 
    %></div><div class='row'><% 
end 

這很好用。

這是我的問題。我得到了我的數學,但我不知道如何將它翻譯成Ruby。讓我解釋。

每個盒子都有一個尺寸。小,中,大。所有尺寸都被分配了一個寬度。 20%,30%和50%。其總和達到100%。

用戶可以在每一行中具有這些框的任何排列。我需要做的是檢查行中的方框合計爲100%。因此,如果它低於或超過100%,我將得到差異,除以3,並將該百分比添加或移除到每個框中,使每個框加起來爲100%。

例如。用戶可以組合大型盒子,大型盒子和小型盒子。這增加了120%。因此,我們得到的差異是20%,將它除以3 = 6.6%,然後從3個盒子中刪除(因爲我們超過了100%)。因此:LargeBox = 43.4%,LargeBox = 43.4%,Small Box = 13.4%。這將加起來達到100%。 (或接近於此)。

我一直在與Ruby的工作,只是不知道如何讓我的數學進入循環或什麼。真的卡在這裏傢伙。我將不勝感激。

乾杯。

+0

你在你的部分組織行的方式非常脆弱,我會*不*這樣做。如果你想將你的列分組成行,我會看看類似['slice'](http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-slice )或['group_by'](http://apidock.com/rails/Enumerable/group_by)。這也可能會讓數學變得更容易。 –

+0

p.s.你能否顯示部分代碼?這些寬度是否來自「圖表」模型的屬性? –

+0

是的。寬度(尺寸)來自圖表模型。例如。 '

'他們是由用戶訂購的,因爲每個盒子都有一個等級。所以每行大小的組合是未知的。我只需要根據它們的大小將每個盒子加起來達到100%。 –

回答

0

我不知道Ruby,但是因爲這也被標記爲'數學',所以讓我提出一個稍微不同的數學方法,可能會更容易。

如果你的總和是120%(例如),計算一個100%/ 120%的比例,這會給你.833。然後乘以.833三個單獨的寬度。這種方式不需要執行三次不同數量的減法。並且100%/ 100%= 1.0,所以在這兩種情況下,相同的過程仍然正常工作。