插件扩展(2)

ruby:1.9.2

rails3.0.3

 

学习编写插件的这个过程中,自动引入plugin中的models, controllers等组件的过程中,加入以下代码出现这样的问题

http://guides.rubyonrails.org/plugins.html#models

 

加入代码:

%w{ models }.each do |dir|
  path = File.join(File.dirname(__FILE__), 'app', dir)
  $LOAD_PATH << path
  ActiveSupport::Dependencies.load_paths << path
  ActiveSupport::Dependencies.load_once_paths.delete(path)
end

 

问题:

/root/NetBeansProjects/rails-demo/vendor/plugins/yaffle/lib/yaffle.rb:10:in `block in <top (required)>': undefined method `load_paths' for ActiveSupport::Dependencies:Module (NoMethodError)
        from /root/NetBeansProjects/rails-demo/vendor/plugins/yaffle/lib/yaffle.rb:5:in `each'
        from /root/NetBeansProjects/rails-demo/vendor/plugins/yaffle/lib/yaffle.rb:5:in `<top (required)>'
        from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require'
        from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `block in require'
        from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:227:in `load_dependency'
        from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require'
        from /root/NetBeansProjects/rails-demo/vendor/plugins/yaffle/rails/init.rb:2:in `block in <class:Plugin>'
 

 

没有找到load_paths方法,最后在源代码中查看,没有发现load_paths与load_once_paths方法。这两个方法是在2.3.5的版本中发现了,是不是升级到3.0.3的时候,给删除了。

 

在3.0.3中,使用了autoload_paths与load_once_paths,这是前两个方法的替换方法。把代码换成以下代码就通过测试了

%w{ models }.each do |dir|
  path = File.join(File.dirname(__FILE__), 'app', dir)
  $LOAD_PATH << path
  ActiveSupport::Dependencies.autoload_paths << path
  ActiveSupport::Dependencies.autoload_once_paths.delete(path)
end

 

 

[1]http://guides.rubyonrails.org/plugins.html#models

[2]http://rubydoc.info/docs/rails/3.0.0/frames

 

 

你可能感兴趣的:(html,Ruby,Rails)