# Check if a record already exists and update if it exists

I want to check if a record already exists in a database, and return true or false.

If it exists, I want to update the update_at datetime field. The method touch_with_version from the paper_trail gem will do it.

Which is better?

  def repeated?(unprocessed)
occurrence = Occurrence.find_by(unprocessed: unprocessed)
occurrence.touch_with_version if occurrence.present?
occurrence.present?
end


Or

  def repeated?(unprocessed)
occurrence = Occurrence.find_by(unprocessed: unprocessed)

if occurrence.present?
occurrence.touch_with_version
true
else
false
end
end


Is there a better way?

When working within a Rails environment you can use try

occurrence.try(:touch_with_version)
occurrence.present?


Ruby also provides tap so you could also write:

occurrence.tap({|o| o.try(:touch_with_version)}).present?


You could even dig into the libraries to see that touch_with_version returns the result of ActiveRecord's save! which in turn returns the result of create_or_update which returns a boolean and so you can write:

occurrence.try(:touch_with_version).present?


If you're happy returning true, false, or nil you could shorten it to:

occurrence.try(:touch_with_version)


Very nice but also more fragile if either of those libraries decide to change their return values in a future release.