How to create and use a module using Ruby on Rails 3?

前端 未结 2 1709
北海茫月
北海茫月 2020-12-07 07:29

I am using Ruby on Rails 3 and I would like to move some custom and shared code in a module.

  1. What syntax should I use to write the module code?
  2. In w
相关标签:
2条回答
  • 2020-12-07 08:10

    To 1. A module is created/opened by simply saying:

    module MyModule
      def first_module_method
      end
    end
    

    To 2. The lib folder. If you want to organize your modules in the lib folder, you can put them into modules themselves. For example, if you wanted a subfolder super_modules your modules would be defined as follows:

    module SuperModules
      module MyModule
        def first_module_method
        end
      end
    end
    

    To 3./5. When including the module in a class you can simply call the modules methods as if they were defined within the class:

    class MyClass
      include MyModule
      def some_method
        first_module_method #calls module method
      end
    end
    

    To 4. Frst, make sure that your module is really needed in every class of your application. If it isn't it makes sense to only include it where it is need so as not to bloat the classes that don't need it anyways. If you really want the module everywhere, include look at the class hierarchy of your classes in the app. Do you want the module in all models? You could open ActiveRecord::Base and add add your module there.

    0 讨论(0)
  • 2020-12-07 08:12

    A>1. You can use the same syntax as any other ruby class. For instance, I'm defining a VehicleClassifer module which is going to use the classify_vehicle method to classify a vehicle based on the number of wheels it receives as an input.

    module VehicleClassifer
      def classify_vehicle(number_of_wheels)
        VehicleType.where("number_of_wheels = ?", number_of_wheels)
      end
    end
    

    A>2. Modules are usually stored in the /lib folder.

    questions 3,4,5 have more or less the same answer. you can use

    class SomeController < ApplicationController
      include VehicleClassfier
    
      def index 
        classify_vehicle(4)  
      end
    end
    

    in the class you're using the module and you will have access to all the module's methods.

    Also, In case you need to use a module through out your app, you can include it in your application controller.

    0 讨论(0)
提交回复
热议问题