Ale*_*hel 3 ruby oop ruby-on-rails ruby-on-rails-3
我在Agile Rails书中做了练习,在application_controller.rb中有一个私有方法,定义如下:
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create session[:cart_id] = cart.id cart
end
Run Code Online (Sandbox Code Playgroud)
可以从UserController #index(方法)内部调用此方法,但我不能将其称为:
class UserController < ApplicationController
@cart = current_cart
...
Run Code Online (Sandbox Code Playgroud)
这是为什么?
您定义的方法ApplicationController是实例方法.因此,可以从派生控制器的另一个实例方法中调用它.这里:
class UserController < ApplicationController
@cart = current_cart
Run Code Online (Sandbox Code Playgroud)
您试图在类定义中调用它,而不是在类的实例方法中调用它,因此它正在寻找一个不存在的类方法.
至于能够在派生控制器中调用私有方法,请参阅Rails中的受保护和私有方法.
编辑:来自http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility:
在Ruby中,"私有"可见性类似于Java中的"受保护".Ruby中的私有方法可以从子级访问.你不能在Ruby中拥有真正的私有方法; 你不能完全隐藏一个方法.
| 归档时间: |
|
| 查看次数: |
1615 次 |
| 最近记录: |