Какую ошибку вы получаете?
Кроме того, обычно метод экземпляра модели не включает параметр для самого объекта. Используйте self
в модели. Например,
class User << ActiveRecord::Base
...
def enroll!(course)
enrollments.create!(:course_id => course.id, :active => true)
self.hours_taught = self.hours_taught + (course.hours_long)
save!
end
...
Добавлено Зачем нужно сохранение ...
Помните, что ActiveRecord действительно отслеживает данные своих моделей в двух местах: в «памяти» и в системе баз данных.
Поскольку сохранение / обновление копии базы данных записи является дорогостоящим с точки зрения времени, вы можете выполнить ряд обновлений для версии записи в памяти и затем сохранить ее в базе данных.
Или, опять же, в зависимости от ситуации, вы можете захотеть, чтобы данная операция с моделью была атомарной и включала сохранение обновленной модели в базу данных.
В этом примере вы назвали метод enroll! ! это соглашение, которое подразумевает, что вы хотите зарегистрироваться! способ «сделать все», включая обновление базы данных.
Следовательно, в самом методе вам необходимо сохранить данные в БД.
Проблема с включением save
в метод объекта заключается в том, что вы можете получить больше сохранений в базе данных, чем это действительно необходимо. Гораздо лучше сохранить сразу несколько изменений, чем сделать несколько сохранений в БД. Но вы не хотите скручивать себя в узлы, чтобы минимизировать экономию. - Просто помните об этой проблеме при планировании потока SW.