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里面吗?
谢谢!
新类UsersController继承了原始类中的所有方法ApplicationController.当您def使用新方法时UsersController,它将替换父控制器中的定义,但任何其他方法仍然存在,并在调用它们时进行评估.
所以,UsersController#method1会打电话UsersController#method2.每次调用方法时,ruby都会从当前上下文中搜索堆栈,直到找到匹配的方法:
1)它检查UsersController#method1,什么也没找到
2)它检查ApplicationController#method1并执行它,调用#method2
3)检查UsersController#method2,找到并执行.
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |