Ruby on rails 应用程序控制器rails中的私有方法

Ruby on rails 应用程序控制器rails中的私有方法,ruby-on-rails,Ruby On Rails,我正在阅读《Rails的敏捷开发》一书()。在第9章中,它在应用程序控制器中定义了一个私有方法: class ApplicationController < ActionController::Base protect_from_forgery private def current_cart Cart.find(session[:cart_id]) rescue ActiveRecord::RecordNotFound car

我正在阅读《Rails的敏捷开发》一书()。在第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
class ApplicationController

它说“这使得这个方法只对其他控制器可用,特别是它阻止Rails将它作为控制器上的一个动作来使用。”我想知道为什么这会使一个私有方法对其他控制器可用?Iknow私有方法只能在同一类中访问。这背后有什么魔力吗?

ruby中的私有方法的工作方式与其他语言中的不同。在ruby中,我们可以从声明私有方法的类以及该类的所有子类中调用私有方法。这解释了为什么您可以在ApplicationController中声明私有方法并使其在所有其他控制器中可用,因为所有其他控制器都是从ApplicationController继承的

关于更多信息,我建议研究ruby访问控制。首先,有一篇很棒的文章


希望这有帮助

ruby中的私有方法的工作方式与其他语言中的不同。在ruby中,我们可以从声明私有方法的类以及该类的所有子类中调用私有方法。这解释了为什么您可以在ApplicationController中声明私有方法并使其在所有其他控制器中可用,因为所有其他控制器都是从ApplicationController继承的

关于更多信息,我建议研究ruby访问控制。首先,有一篇很棒的文章

希望这有帮助