我不能肯定地说,这是Rails的问题,但我的猜测是,这是不离谱。在Rails应用程序的情况下,最后的“修复”可能不容易应用。
首先,目录列表:
> ls -R
.:
bar_then_foo.rb bar_then_foo2.rb foo_then_bar.rb lib_foo lib_fubar
./lib_foo:
helper.rb
./lib_fubar:
helper.rb
助手模块:
> cat lib_foo/helper.rb
module Helper
def foo
puts "foo"
end
def bar
puts "bar"
end
end
> cat lib_fubar/helper.rb
module Helper
def foo
puts "foo-bar"
end
end
的Ruby代码:
> cat bar_then_foo.rb
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_fubar'
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_foo'
require 'helper'
class FoobieDoo
include Helper
end
f = FoobieDoo.new
f.foo
f.bar
> cat foo_then_bar.rb
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_foo'
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_fubar'
require 'helper'
class FoobieDoo
include Helper
end
f = FoobieDoo.new
f.foo
f.bar
和一些输出:
> ruby bar_then_foo.rb
foo
bar
> ruby foo_then_bar.rb
foo-bar
foo_then_bar.rb:12: undefined method 'bar' for #<FoobieDoo:0x1042e93c> (NoMethodError)
因此Ruby从终端搜索$ LOAD_PATH并尽快找到一个匹配停止。
让我们尝试别的东西:
> cat bar_then_foo2.rb
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_fubar'
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib_foo'
require 'helper'
load "lib_fubar/helper.rb"
class FoobieDoo
include Helper
end
f = FoobieDoo.new
f.foo
f.bar
> ruby bar_then_foo2.rb
foo-bar
bar
期望的结果?
也许你可以修改app/helpers/application_helper.rb
来搜索LOAD_PATH中的其他application_helper.rb文件并加载它们?
嗯...我不明白为什么会如此。你确定第一个ApplicationHelper被包含在你的项目中吗?如果你删除你的`application_title`,你会得到“Foo”吗? – 2009-06-17 17:16:26
。你确定帮手是否真的被包含在你的应用中? – cpjolicoeur 2009-06-17 17:17:46