У меня есть метод/действие/часть кода (я всегда немного теряю терминологию рельсов), настроенный в моей модели, чтобы обновить оставшуюся сумму в бюджете при вводе новое объявление.Расчет в модели с ошибкой для задачи рейка
class Budget < ActiveRecord::Base
belongs_to :client
has_many :adverts
before_save :update_budget
validates :name, :amount, :client_id, presence: true
def update_budget
self.amount_remaining = self.amount - self.amount_spent
end
end
Это прекрасно работает при обновлении моих бюджетов или вводе нового объявления. Все работает так, как должно. Тем не менее, я написал задачу грабли, чтобы написать список повторяющихся бюджетов в таблицу бюджета (чтобы я мог планировать ее ежемесячно). Однако, когда я запускаю эту задачу с терминала, она сталкивается с ошибкой.
The rake task.
desc "Recurring Updates"
task :recurring_budgets => :environment do
@recurring_budgets = RecurringBudget.all
@recurring_budgets.each do |recurring_budget|
Budget.create(name: recurring_budget.name, amount: recurring_budget.amount, client_id: recurring_budget.client_id)
end
end
Ошибка.
$ rake recurring_budgets
rake aborted!
TypeError: nil can't be coerced into Fixnum
/Users/tomgamon/projects/adsman/app/models/budget.rb:9:in `-'
/Users/tomgamon/projects/adsman/app/models/budget.rb:9:in `update_budget'
/Users/tomgamon/projects/adsman/lib/tasks/recurring_budgets.rake:6:in `block (2 levels) in <top (required)>'
/Users/tomgamon/projects/adsman/lib/tasks/recurring_budgets.rake:5:in `block in <top (required)>'
Tasks: TOP => recurring_budgets
(See full trace by running task with --trace)
Стоит отметить, когда я удалить метод из моей модели, задача записывает в бюджет таблицы штрафа.
У кого-нибудь есть идеи?
Блестящий. Я добавил значения по умолчанию в таблицу и теперь работает отлично. Благодаря! – thrgamon