ActiveRecord enums are really handy but they can be equally evil if not used properly.
Recently we encountered a strange situation where a developer added a simple
belongs_to relationship between two of the models -
Investor has one
BankAccount. And it did not work!
BankAccount.first.investor was working but
Investor.first.bank_account was returning
nil even though the bank_account
existed for that investor.
I went in to debug.
spellings everywhere - check
Try relationship in console - fails
Why on earth was a simple relationship like this failing?
We have used this hundreds of times! It should just work!
After spending a good 20mins into this, found out that there was an enum defined on
Investor with the name
are very useful in the way they map domain level states to integers in database
(or even enums in case of postgres), but what they do is monkey-patch
activerecord with various methods corresponding to the enums.
And in this case the enum method
#bank_account took priority over the relation method with the same name.
Use enums carefully and sparingly keeping in mind the plethora of methods it defines on your model.