1.1 KiB
Mask An ActiveRecord Attribute
Let's say we have a User model with backing table that has an email
attribute.
If we look up a User record, we can grab its email because Rails provides an
accessor to that attribute under the hood.
> user.email
'Liz.Lemon@example.com'
We can write a custom #email method on User to mask that attribute. We
could do this for any number of reasons. One might be to always downcase the
email before retrieving it and using it througout app code.
class User < ApplicationRecord
def email
read_attribute(:email).downcase
end
end
This uses the
#read_attribute
method which retreives the type casted value before hitting the accessor
method. We have to do this, rather than calling #email directly, because that
would result in an infinite loop.
> user.email
'liz.lemon@example.com'
I'd probably handle this email scenario at the DB-layer. Nevertheless, this demonstrates a technique we can use in a variety of scenarios at the Rails-layer.