Rails适用于ApplicationController方法的范围

Jau*_*uny 1 ruby scope ruby-on-rails

当我从一个继承控制器(如UsersController <ApplicationController)调用一个存在于ApplicationController内的方法时,该方法的范围是什么?ApplicationController或UsersController?

假设我有这些文件

class ApplicationController < ActionController::Base
  def method1
    method2
  end

  def method2
    ...
  end
end

class UsersController < ApplicationController
  # call method1 from here

  def method2
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

所以你可以在这里看到,我从UsersController调用method1(它存在于appcontroller中); 请问method1调用方法2生活在UsersController或ApplicationController里面吗?

谢谢!

Jos*_*ott 7

新类UsersController继承了原始类中的所有方法ApplicationController.当您def使用新方法时UsersController,它将替换父控制器中的定义,但任何其他方法仍然存在,并在调用它们时进行评估.

所以,UsersController#method1会打电话UsersController#method2.每次调用方法时,ruby都会从当前上下文中搜索堆栈,直到找到匹配的方法:

1)它检查UsersController#method1,什么也没找到

2)它检查ApplicationController#method1并执行它,调用#method2

3)检查UsersController#method2,找到并执行.