All*_*ate 0 ruby ruby-on-rails
REST API railscast具有以下代码示例:
module Api
module V1
class ProductsController < ApplicationController
class Product < ::Product
def as_json(options={})
super.merge(released_on: released_at.to_date)
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我无法遵循以下内容:
class Product < ::Product
Run Code Online (Sandbox Code Playgroud)
......呢?当我尝试在irb中重新创建类似的东西时,我得到:
module Fooirb(main):001:0> module Foobar
irb(main):002:1> class Product < ::Product
irb(main):003:2> end
irb(main):004:1> end
NameError: uninitialized constant Product
from (irb):2:in `<module:Foobar>'
from (irb):1
Run Code Online (Sandbox Code Playgroud)
该::令牌表示命名空间,如果没有什么,直接使用之前,它访问顶级命名空间.例如,采取这个小程序:
class Bar
def initialize
puts "New ingot created"
end
end
module Foo
class Bar
def initialize(location)
puts "New bar built in #{location}".
end
end
def self.new_bar(which)
if which == :top
Bar.new("Rubytown, USA")
else
::Bar.new
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果您致电Foo.new_bar(:top),则会New bar built in Rubytown, USA打印消息.相反,如果你使用Foo.new_bar(:place_to_drink)它,那么它会打印New ingot created".