Joh*_*ohn 14 ruby-on-rails autoload ruby-on-rails-3
情况:
我lib/foo/bar.rb
用一个定义如下的简单方法编写代码:
module Foo
class Bar
def test
"FooBar"
end
end
end
Run Code Online (Sandbox Code Playgroud)在我的帮手中FooBarHelper
,我有:
require `lib/foo/bar`
module FooBarHelper
def test_foo_bar
fb = Foo::Bar.new
fb.test
end
end
Run Code Online (Sandbox Code Playgroud)在我看来,我称之为辅助方法如下:
<%= test_foo_bar =>
Run Code Online (Sandbox Code Playgroud)在我config/environments/development.rb
,我将目录添加到我的config.autoload_paths
:
config.autoload_paths += ["#{config.root}/lib/foo"]
Run Code Online (Sandbox Code Playgroud)问题:
Foo::Bar.test
例如,当我更改to 的返回值时,"MODIFIED FOOBAR"
原始返回值"FooBar"
仍然显示在视图上而不是新值.
由于我处于开发模式,代码不应该在每个请求上重新加载代码吗?
有人能告诉我我错过了什么吗?
谢谢!
Mik*_*ski 25
以前的答案不起作用.这是一个有效的工作:http://ileitch.github.com/2012/03/24/rails-32-code-reloading-from-lib.html
你必须使用两者:
config.watchable_dirs['lib'] = [:rb]
Run Code Online (Sandbox Code Playgroud)
和
require_dependency
Run Code Online (Sandbox Code Playgroud)
但任何config.autoload_paths
基于解决方案都不适用于Rails~> 3.2
他们删除了lib
Rails 3中app根的文件夹.
config.autoload_paths << 'lib'
Run Code Online (Sandbox Code Playgroud)
或者您可以在助手中使用`require_dependency`.
module FooBarHelper
require_dependency 'foo/bar'
def test_foo_bar
fb = Foo::Bar.new
fb.test
end
end
Run Code Online (Sandbox Code Playgroud)
两种方式都告诉Rails您的文件lib/foo/bar.rb
应该自动加载,然后重新加载每个请求.