Forum: Ruby Proper way to include module methods with dynamic code?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
3cbe6157fca13c0fbbb5ed81b803c555?d=identicon&s=25 Web Manager (jdw)
on 2009-03-06 16:27
Hi,

(This is in a Rails context, but I believe is much more of a Ruby
question so is posted here.)

I've got an index method with some dynamic bits I'd like to place into a
module and include in several controllers:

module MyApp::ListsControllerIndex
  def index
    self.instance_variable_set( "@#{@models_str}", @klass.find(:all) )

    respond_to do |format|
      format.html do
        render 'shared/lists_index'
      end
    end
  end # End index
end # End module

(The instance variables @models_str and @klass are set by a
before_filter in the controller.)

When I try to include this module into controllers via any combination
of include or extend, I either get:

1) a nil.find error as Ruby seems to try and execute/resolve @klass in
@klass.find when included rather than after the filters have run (seen
with include)
2) the included method is not found (seen with extend)

What I'd like is the method to be added to my controller class and be
sitting ready and waiting to evaluate the dynamic bits when called.  (Or
said another way, for the included method to work successfully the same
way it does when it's defined directly in the controller or a superclass
of the controller.)

I've read through include/extend docs but clearly need some additional
help.  Any is much appreciated and thanks for your time!

Cheers.
9a0f71617ff62a2b26009f2520b29b8d?d=identicon&s=25 Nanfang Zhao (Guest)
on 2009-03-06 16:57
(Received via mailing list)
Methods in module will become the instance methods of the class which
includes this module.
make sure your  before_filter is running properly, and @klass is
defined.
3cbe6157fca13c0fbbb5ed81b803c555?d=identicon&s=25 Web Manager (jdw)
on 2009-03-06 19:39
Hi Nanfang,

Thanks for your response... you were indeed correct sir, it was my
oversight re: the before filter.

All best!
This topic is locked and can not be replied to.