Ruby:将方法添加到现有模块

时间:2013-03-07 15:02:49

标签: ruby-on-rails ruby ruby-on-rails-3 module metaprogramming

有一个模块:

module ActionDispatch
  module Routing
  end
end

方法:

def add_movie_path
end

def edit_movie_path
end

如何添加模块路由此方法?

只有this吗?

3 个答案:

答案 0 :(得分:3)

尝试:

module ActionDispatch
  module Routing
    def add_movie_path
    end

    def edit_movie_path
    end
     module_function :edit_movie_path
  end
end

这样你就可以像这样一个实例方法进行调用:

class Make
   include ActionDispatch::Routing
end 


class MakeAll
   def only_needs_the_one_method
      ActionDispatch::Routing.edit_movie_path
   end
end 

您还可以使用self.class_name将其定义为类方法,然后直接访问它:

module ActionDispatch
  module Routing
    def self.add_movie_path
    end

    def self.edit_movie_path
    end
  end
end

class Make
    include ActionDispatch::Routing
   def do_something
     ActionDispatch::Routing.add_movie_path
   end
end 


class MakeAll
   def only_needs_the_one_method
      ActionDispatch::Routing.edit_movie_path
   end
end

请参阅Modules Magic了解更多信息。

答案 1 :(得分:2)

除非我误解了你的问题,否则怎么样:

module ActionDispatch
  module Routing
    def add_movie_path
    end

    def edit_movie_path
    end
  end
end

或者,您可以使用module_eval

答案 2 :(得分:0)

只需将您的方法放在模块中即可。

module ActionDispatch
  module Routing
    def add_movie_path
    end

    def edit_movie_path
    end  
  end
end