我正在阅读“使用Rails进行敏捷开发”一书(http://www.amazon.com/Agile-Development-Rails-Pragmatic-Programmers/dp/1934356549)。在第9章中,它定义了应用程序控制器中的私有方法:
class ApplicationController < ActionController::Base
protect_from_forgery
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
end
它说“这使得此方法仅对其他控制器可用,特别是它可以防止Rails将其作为控制器上的操作提供。”我想知道为什么这会使私有方法可用于其他控制器?我知道私有方法只能在同一个类中访问。这背后有什么魔力吗?
答案 0 :(得分:2)
ruby中的私有方法与其他语言的工作方式相同。在ruby 中,我们可以在声明它的类中调用私有方法以及该类的所有子类。这解释了为什么你可以在ApplicationController中声明一个私有方法并让它在所有其他控制器中可用,因为所有其他控制器都是从ApplicationController继承的。
有关更多信息,我建议研究ruby访问控制。首先,有一篇很棒的文章here。
希望这有帮助!