У меня есть модель (назовем ее A) в проекте Rails, которая проверяет атрибут (назовем его a) с помощью ActiveRecord :: Dirty a_changed? функция на before_save. Я хочу иметь возможность сохранить экземпляр A в задаче Rake, но просто включаю: среда его не разрезает - в задаче Rake я получаю сообщение «метод не определен? Определен для A». Как заставить ActiveRecord помнить о ActiveRecord :: Dirty в задаче Rake?
Версия Rails - 2.3.11
namespace :some_namespace do
namespace :some_subnamespace do
desc "This is a Rake Task"
task :some_taskname, [:some_arg] => [:environment] do |t,arg|
foo = A.find(11111)
foo.save #<=== fails with "no method a_changed? defined on A"
end
end
end
Так как это довольно плотная куча информации, вот разбивка:
- У меня есть модель A с атрибутом a.
- В модели A определен триггер before_save, вызывающий a_changed?, Который является методом, добавленным ActiveRecord :: Dirty в среде Rails. Нет проблем с вызовом этого с контроллера.
- В моей задаче Rake, однако, a_changed? вызов в триггере before_save вызывает исключение NoMethodError, предположительно потому, что требования [: environment] недостаточно для включения ActiveRecord :: Dirty. Мой вопрос заключается в том, как этого избежать (мой обходной путь - спасти NoMethodError из before_save, что является очевидным взломом).