2016-06-13 80 views
0

我正在創建一個動作跟蹤器/待辦事項列表,並且我想爲每個動作項目分配點數。我希望允許用戶添加儘可能多的項目,但對所有操作項目的「totalpts」總和限制爲1000.我該怎麼做?如何限制值(基於類似項目的總和)

作爲參考的問題,這裏是一個局部的我的顯示代碼:

<% @todo_list.todo_items.order('totalpts DESC').each do |todo_item| %> 
    <% if todo_item.completed? && todo_item.created_at.strftime("%U").to_i == Date.today.strftime("%U").to_i %> 
    <tr id="<%= dom_id(todo_item) %>"> 
    <td><%= todo_item.completed_at.strftime("%A ") %></td> 
    <td><%= todo_item.content %></td> 
    <td><%= todo_item.currentpts %></td> 
    <td><%= todo_item.totalpts %></td> 

回答

0

您可以隨時使用min函數從Enum類。

[1, 3].min 
=> 1 

沿着這條線的東西是你應該尋找的東西。

[1000, calculate_points_for_action(action)].min 

這應該返回兩者之間的較低數字。在這種情況下,1000是您可以針對給定操作獲得的最大點數。

我也會考慮把1000變成一個常數。這將允許您在將來只需要更改單個位置而不必查找所有調用,從而輕鬆更改它。

+0

我該如何在控制器中做到這一點?我假設那是我應該放置的地方。我明白你在推薦什麼,但努力去理解如何實施。 –

+0

如果您使用MVC,這實際上更適合模型。這是因爲它只是在操縱數據,這就是模型應該做的。這樣,如果將它放入名爲'points_for_action(action)'的模型函數中,您可以只執行'myObject.points_for_action(action)'。假設你正在爲不同的動作做不同的計算。 –