當執行
Rails.application.config.session_store
#=> ActionDispatch::Session::ActiveRecordStore
你調用的session_store
方法。 ActionDispatch::Session::ActiveRecordStore
是方法的返回值,而不是方法本身。而且,由於ActiveRecordStore
是一類,它並沒有迴應source_location
:
Rails.application.config.session_store.source_location
#=> NoMethodError: undefined method `source_location' for ActionDispatch::Session::CookieStore:Class
在JavaScript(和其他語言),函數可以通過它的名稱通過附加括號引用,並呼籲:
function foo() {
return 123;
}
foo // function() { return 123; }
typeof foo // "function"
foo() // 123
typeof foo() // "number"
在Ruby然而,調用方法時,括號是可選的,既foo
和foo()
調用方法:
def foo
123
end
foo #=> 123
foo.class #=> "fixnum"
foo() #=> 123
foo().class #=> "fixnum"
要獲取Method
對象對某個方法的名稱,你必須調用method
方法上的接收器:
method(:foo) #=> #<Method: Object#foo>
你的情況:
Rails.application.config.method(:session_store)
#=> #<Method: Rails::Application::Configuration#session_store>
Rails.application.config.method(:session_store).source_location
#=> [".../gems/railties-4.2.6/lib/rails/application/configuration.rb", 163]
這裏的源代碼:railties/lib/rails/application/configuration.rb:163
它是一個方法調用,'ActionDispatch :: Session :: ActiveRecordStore'是方法的返回值。 – Stefan
謝謝。我似乎無法找到Rails :: Application :: Configuration或其父母記錄的此方法。它應該是?我嘗試了'Rails.application.config.session_store.source_location'來試圖確定它的定義。 – Noob123
嘗試'Rails.application.config.method(:session_store).source_location',它應該指向[.../gems/railties-4.2.6/lib/rails/application/configuration.rb:163](https: //github.com/rails/rails/blob/v4.2.6/railties/lib/rails/application/configuration.rb#L163) – Stefan