Я думаю, что вы ищете проверку в модели Contribution вместо предложения: reject_if.
: reject_if выбросит всю запись, если условие выполнено.
Неудачные проверки в модели участия заблокируют сохранение соответствующего подарка. Однако @gift сохранит вклад независимо от значения его суммы при неудачном сохранении, что дает вашему пользователю возможность исправить его, когда контроллер снова выполнит новое действие.
Решение состоит в том, чтобы удалить предложение: reject_if из оператора accepts_nested_attributes_for и добавить validates_presence_of_amount в модели Contributions.
class Gift < ActiveRecord::Base
has_many :contributions
accepts_nested_attributes_for :contributions
...
end
class Contribution < ActiveRecord::Base
validates_presence_of :amount
...
end