これは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 "が得られますか? –
。ヘルパーが実際にあなたのアプリに含まれていると確信していますか? – cpjolicoeur
application_title()メソッドを削除すると、application_title()が定義されていないというエラーが表示されます。しかし、私がモジュール全体を削除すると、私は "Foo"を取得します。 –