如何使用Ruby on Rails 3创build和使用模块?

我正在使用Ruby on Rails 3,我想在模块中移动一些自定义和共享的代码。

  1. 我应该用什么语法来编写模块代码?
  2. 在我的应用程序的哪个文件夹中,我必须放置模块文件?
  3. 我如何将这个模块包含在一个或多个控制器类中?
  4. 还有什么其他的行动,我必须在我的应用程序的任何地方使用自定义模块?
  5. 如何从我的应用程序中调用模块中的方法?

提前致谢。

要1.模块创build/打开简单地说:

module MyModule def first_module_method end end 

到2. lib文件夹。 如果你想在lib文件夹中组织你的模块,你可以把它们放入模块中。 例如,如果你想要一个子文件夹super_modules你的模块将被定义如下:

 module SuperModules module MyModule def first_module_method end end end 

到3./5。 将模块包含在类中时,可以简单地调用模块方法,就好像它们是在类中定义的那样:

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

4.首先,确保你的模块在你的应用程序的每一个类中都是真正需要的。 如果不是这样的话,只在需要的地方包括它,这样才不会使不需要它的类膨胀。 如果你真的需要这个模块,请在应用程序中查看类的类层次结构。 你想在所有模型中的模块? 你可以打开ActiveRecord :: Base并添加你的模块。

A> 1。 您可以使用与其他任何Ruby类相同的语法。 例如,我正在定义一个VehicleClassifer模块,它将使用classify_vehicle方法根据接收到的车轮数目作为input对车辆进行分类。

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

A> 2。 模块通常存储在/ lib文件夹中。

问题3,4,5或多或less具有相同的答案。 您可以使用

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

在你使用模块的类中,你将可以访问所有模块的方法。

此外,如果您需要在应用程序中使用模块,则可以将其包含在应用程序控制器中。