I’ve been meaning to get back into blogging here, and I think I have been blocked by the fact that many of the posts in my mental backlog are somewhat large in scope. So here’s a useful bit of ActiveRecord trivia that I just learned.
When no records are found, the “find” method (ie Person.find(‘badinput’)) throws ActiveRecord::RecordNotFound.
However, any find_by_* method, such as Person.find_by_netid(‘badinput’), will return nil.
This was rather confusing as I focused on the error handling semantics of the Banner API. I want that exception. Good news, though:
find_by_netid!(‘badinput’) throws the exception. The bang changes the behavior, as it often does, though not always in the way you may expect.
TLDR:
2.0.0-p353 :001 > Person.find('badinput') ActiveRecord::RecordNotFound: Couldn't find Person with ndid=badinput <snip> 2.0.0-p353 :002 > Person.find_by_netid('badinput') => nil 2.0.0-p353 :003 > Person.find_by_netid!('badinput') ActiveRecord::RecordNotFound: Couldn't find Person with netid = badinput <snip>
So that’s it. Maybe this will get me back in the habit. Happy coding!