Just a FYI, we could use ActiveSupport::Concerns for this. http://api.rubyonrails.org/classes/ActiveSupport/Concern.html