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

时间:2014-09-11 20:02:03

标签: ruby-on-rails

我正在阅读“使用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将其作为控制器上的操作提供。”我想知道为什么这会使私有方法可用于其他控制器?我知道私有方法只能在同一个类中访问。这背后有什么魔力吗?

1 个答案:

答案 0 :(得分:2)

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

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

希望这有帮助!