我正在使用Ruby on Rails 3,并且想在模块中移动一些自定义和共享的代码。
- 我应该使用什么语法来编写模块代码?
- 我必须将模块文件放在应用程序的哪个文件夹中?
- 如何在一个或多个控制器类中包含该模块?
- 我还必须在应用程序中的任何位置使用自定义模块采取什么其他措施?
- 如何从我的应用程序调用模块中的方法?
提前致谢。
Answers:
要1.通过简单说出一个模块来创建/打开:
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.在您的应用程序的每个类中都确实需要您的模块。如果不是,那么只在需要的地方包含它是有意义的,这样就不会使那些根本不需要它的类classes肿。如果您真的想在各处使用该模块,请在应用程序中查看您的类的类层次结构。您是否需要所有型号的模块?您可以打开ActiveRecord :: Base并在其中添加添加模块。
lib
文件夹中包含上述模块创建了一个模块,一个重要的注意事项就是使Rails3取消注释该行config\application.rb
的内容config.autoload_paths
-阅读例如stackoverflow.com/questions/1073076/rails-lib-modules-and ...注意同样,您必须小心使用与模块名称本身匹配的模块文件名。因此,如果将其保存在中lib/test/my_module.rb
,则必须include Test::MyModule
-有关更多详细信息,请参见stackoverflow.com/questions/4073856/rails-3-autoload
app/models
如果代码需要访问其他模型,则将您的代码(包括附加模块)放入其中。如果您的代码是真正的“库”并且可以独立存在,我例如,请参阅github.com/shageman/the_next_big_thing
A> 1。您可以使用与任何其他ruby类相同的语法。例如,我正在定义一个VehicleClassifer模块,该模块将使用classify_vehicle方法根据其作为输入接收的车轮数对车辆进行分类。
module VehicleClassifer
def classify_vehicle(number_of_wheels)
VehicleType.where("number_of_wheels = ?", number_of_wheels)
end
end
A> 2。模块通常存储在/ lib文件夹中。
问题3、4、5的答案大致相同。您可以使用
class SomeController < ApplicationController
include VehicleClassfier
def index
classify_vehicle(4)
end
end
在您正在使用该模块的类中,您将有权访问该模块的所有方法。
另外,如果您需要在整个应用程序中使用模块,则可以将其包含在应用程序控制器中。
ApplicationHelper
吗?