2015-04-08 45 views
2

我有一個具有「百分比」一軌模型屬性屬性總和軌

我想確保所有「百分比」的總和不> 100添加新值時。

在我的模型,我有

validate :sum_can_not_exceed_hundred 
def sum_can_not_exceed_hundred 
    if Result.all.sum(:percentage) > 100 
    errors.add(:base, :sum_can_not_exceed_hundred) 
    end 
end 

但這並不用於添加不在數據庫中的記錄工作,這些都已經被儲存。

更新: 以下似乎工作,使用提示從Coderhs

if Result.where.not(id: self.id).sum(:percentage_share) + self.percentage_share > 100 
    errors.add(:base, :sum_can_not_exceed_hundred) 
end 
+0

你可以叫上## before_create方法的代碼:check_percentage – Milind

回答

2

因爲你的表是新的,將不提供Result.all。嘗試修改像這樣

validate :sum_can_not_exceed_hundred 
    def sum_can_not_exceed_hundred 
    sum = if self.id 
     Result.all.sum(:percentage) 
    else 
     self.percentage + Result.all.sum(:percentage) 
    end 
    errors.add(:base, :sum_can_not_exceed_hundred) if sum > 100 
    end 
end 
+0

但是這不會對編輯工作,因爲Result.all包括正在編輯的行,對吧? – Tiamon

+0

最簡單的修復方法是添加一個條件來檢查它是否在創建或更新時發生。 – coderhs