update_attribute() calls save(), but remember that save() can return false on failure.
Test the return value of prog.update_attribute(:salary, 1000). You'll probably find that it's false, which means the save() failed.
Then you can start looking for _why_ it failed. However, this is a good lesson. _Always_ test for save failure in actions that call it.