2015-04-08 2 views
2

У меня есть модель рельсов, которая имеет «процент» атрибутSum атрибутов в рельсах

Я хотел бы, чтобы убедиться, что сумма всех «процент» не> 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 

Но это не работает для добавления записей, которые не являются на дб и те уже спасены.

Update: Следующая, кажется, работает, используя подсказку из 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

Смежные вопросы