rails中的Sum属性

时间:2015-04-08 12:59:22

标签: ruby-on-rails

我的导轨型号的百分比为'属性

我想确保所有'百分比的总和'不是>添加新值时为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

1 个答案:

答案 0 :(得分: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