Rails find getting ActiveRecord::RecordNotFound
Rails will always raise an ActiveRecord::RecordNotFound exception when you use the find
method. The find_by_*
methods, however, return nil
when no record is found.
The ActiveRecord documentation tells us:
RecordNotFound - No record responded to the find method. Either the row with the given ID doesn't exist or the row didn't meet the additional restrictions. Some find calls do not raise this exception to signal nothing was found, please check its documentation for further details.
If you'd like to return nil
when records cannot be found, simply handle the exception as follows:
begin
my_record = Record.find params[:id]
rescue ActiveRecord::RecordNotFound => e
my_record = nil
end
Can't you write
my_record = Record.find(params[:id]) rescue nil
Record.find_by(id: params[:id])
returns Record
object if it is found or nil if it is not.