How to include a module in all of Rails project's ActiveRecord models?
I want to include this module in every ActiveRe开发者_如何转开发cord model in my Rails app, without dropping include NotificationResourceableTraits
in each file. Is there a way?
module NotificationResourceableTraits
def self.included(base)
base.has_many :notification_resources, :as => :notification_resourceable
base.has_many :notifications, :through => :notification_resources
end
end
I've tackled this problem just recently. Take a look at my Gist: http://gist.github.com/404298
You could simply do this:
ModelDiscovery.valid_active_record_classes.each do |model|
model.include YourMixinModule
end
Explanation
- Get list of all files in 'app/models'
- Convert filenames to CamelCase
- Constantize all of them
- Check if the tables exist (if you want)
精彩评论