In most projects I'm using an initializer to load all lib/*.rb files,
like:

config/initializers/requires.rb:

# auto-load all ruby files from RAILS_ROOT/lib/
Dir[File.join(RAILS_ROOT, 'lib', '*.rb')].each do |file|
  require file

Note, if you have any files you do not want auto-loaded, you certainly
don't want to use that initializer :). Alternate option would be to
create a very simple plugin:

vender/plugins/acts_as_commentable/init.rb:

class ActiveRecord::Base
  def self.acts_as_commentable
    include Commentable
  end
end

This should work as well.

- lukas

On Oct 23, 11:33 pm, Scott Johnson <[email protected]> wrote:
> Many thanks... #2 is what I was thinking, but I don't understand how
> lib/commentable.rb would get loaded in that case?
>
> On Oct 23, 1:12 pm, Marnen Laibow-Koser <rails-mailing-l...@andreas-
>
> s.net> wrote:
> > Scott Johnson wrote:
> > > On Oct 23, 11:11 am, Marnen Laibow-Koser <rails-mailing-l...@andreas-
> > > s.net> wrote:
> > >> Define it as an ActiveRecord::Base class method.
>
> > > Sure, but where? In lib/* somewhere? I'll need it to get loaded before
> > > any of these models get loaded. (Or I would have to add a 'require' to
> > > each commentable model.)
>
> > You have a number of choices:
>
> > 1.
> > /lib/commentable.rb
> > module Commentable
> >   def self.included(base)
> >     base.has_many :subscriptions, :as => :subscribable
> >     # and so on
> >   end
> > end
>
> > /app/models/blog_post.rb
> > class BlogPost < AR::B
> >   include Commentable
>
> >   # rest of class definition
> > end
>
> > 2.
> > /lib/commentable.rb
> > # as in 1, but after the end of the module (or in environment.rb):
> > class ActiveRecord::Base
> >   def self.acts_as_commentable
> >     include Commentable
> >   end
> > end
>
> > /app/models/blog_post.rb
> > class BlogPost < AR::B
> >   acts_as_commentable
> > end
>
> > 3 (probably not recommended).
> > /config/environment.rb
> > class ActiveRecord::Base
> >   def self.acts_as_commentable
> >     has_many :subscriptions, ;as => :subscribable
> >     # and the other has_manys
> >   end
> > end
>
> > 4.  Write an acts_as plugin (but call it something else -- I think
> > acts_as_commentable is already taken as a plugin name).
>
> > Does that help?
>
> > Best,
> > --
> > Marnen Laibow-Koserhttp://www.marnen.org
> > [email protected]
> > --
> > Posted viahttp://www.ruby-forum.com/.
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to