필자는 이것이 레일스의 문제라고 말할 수는 없지만 멀리 떨어져있는 것은 아닙니다. 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
루비 코드 :
> 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"가 표시됩니다. –