我在控制器中有一些行为,为了更好地测试并在几个地方重用它,我把它拉到一个模块中。关于这一点,有两个问题:
config/initializers/目录。不过,我觉得有点可疑。lib/include可以在控制器中使用这些模块?谢谢各位先生。
发布于 2010-10-16 13:03:05
lib/对于模块来说是一个很好的地方;比config/initializers/好得多--至少在我看来是这样的。如果它是几个模块,或者一个大模块,您也可以考虑将它作为一个插件,并将其放在vendor/plugins中。如果您将其放入lib/目录中自动加载文件。您可以将需求放在您的一个配置文件中.我通常把我的附加自动加载到config/application.rb中。类似这样的操作应该可以做到(假设您的.rb文件位于一个名为lib/my_module的目录中):
config.autoload_paths += Dir["#{Rails.root}/lib/my_module"]您必须确保您的模块是实际的module,而不是class。然后,您可以简单地将其包括在内:
# lib/my_module/foobar.rb
module Foobar
def foobar
"Hello world!"
end
end
# app/models/my_model.rb
class MyModel < ActiveRecord::Base
include Foobar
end
# rails console
>> obj = MyModel.first
=> #<MyModel id: 1, ...>
>> obj.id
=> 1
>> obj.foobar
=> "Hello world!"发布于 2012-08-14 07:45:43
1)我喜欢放在:我在app/扩展下的类扩展,/app/下面的模块/ /app/services下的混合服务
2)您可以将您的应用程序配置为在config/ application中加载所有这些。of :类扩展应该是正确的,并且可以将混合器和服务添加到自动加载路径中
class Application < Rails::Application
# require class extentions right now
Dir[Rails.root.join('app', 'extentions', "*.rb")].each {|l| require l }
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += Dir[Rails.root.join('app', 'mixins', '{**}')]
config.autoload_paths += Dir[Rails.root.join('app', 'services', '{**}')](我在使用rails 3)
发布于 2011-09-23 10:31:32
尝试在app/controllers中放置控制器特定的模块。不需要require。
https://stackoverflow.com/questions/3945124
复制相似问题