views:

30

answers:

1

Hi Stackies,

I want to include this module in every ActiveRecord 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
+1  A: 

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

  1. Get list of all files in 'app/models'
  2. Convert filenames to CamelCase
  3. Constantize all of them
  4. Check if the tables exist (if you want)
Daniel Beardsley