如何将库加载到控制器以及如何动态加载应用程序

时间:2010-09-09 20:12:06

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

我是Rails的新手。我来自Codeigniter背景。我很难在初学者的Rails 3.0上找到资源。我读了我的新Rails书,但仍然对一些事情感到困惑。

如何将我的库或帮助程序包含到控制器中?我使用“包含”还是“要求”?

第二个问题是如何动态加载插件?假设我有1000个插件。我不希望它们全部初始化。有没有办法控制哪个插件从控制器初始化?

2 个答案:

答案 0 :(得分:2)

当您的应用启动时,它会运行yourapp/config/initializers中的所有脚本,您可以添加一些您想要的内容。

yourapp/config/application.rb您可以添加

config.autoload_paths += %W(#{config.root}/lib)

class Application声明中。 然后,只要您使用类,SomeNewClass.new "param" rails就会尝试自动加载yourapp/lib/some_new_class.rb

至于你的第二个问题,我不知道。我从未使用过多个插件。

答案 1 :(得分:0)

与PHP(Codeigniter)不同,Ruby requireinclude的行为非常不同。 require加载指定路径(有点像PHP),而include通常用于在Module中包含Class

require是来自Kernel的方法,而include更像是类Class的对象。试试 -

Kernel.respond_to? :require
include.is_a? Class

在跳过Rails之前,我建议你阅读Ruby。我建议this bookhttp://en.wikibooks.org/wiki/Ruby_programming_language

对于Ruby on Rails,我建议 -

  1. http://guides.rubyonrails.org/
  2. http://api.rubyonrails.org/
  3. 对于第二个问题, 我想,初始化插件是Rails初始化过程的一部分,所以它可能不是选择性(但我不确定)。有关详细信息,请参阅http://ryanbigg.com/guides/initialization.html

    避免插件初始化的最简单方法是将它放在Rails'(auto)load_paths中的某个路径中,在需要时在控制器中说vendor/extensionsrequire使用

    require "vendor/extensions/example-plugin/lib/example-plugin"
    

    但是,我建议不要这样做,并建议等到你的插件数达到1000/10。 :)