I have a model method that I'd like to call from various controllers. It looks something like this:
def Post < ActiveRecord::Base
def read!
self.read_at = Time.now
self.save
self.thread.status = Status.find_by_name("read")
self.thread.save
end
end
In my controller, if I call @post.read!
, will this rollback on any errors?
In your current setup, if read_at gives an error, it will still continue onto the code that executes thread.status
for example.
You want to use ActiveRecord transactions:
def read!
transaction do
self.read_at = Time.now
self.save
self.thread.status = Status.find_by_name("read")
self.thread.save
end
end
By using transactions, you can be assured that either all your database calls(within the transaction block) will be persisted to the database, or none at all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With